QT控件之Qtable Widget
目錄
1、表格基礎屬性
- 表格的定義
//方法1:
QTableWidget *tableWidget = new QTableWidget(10,5); // 構造了一個QTableWidget的對象,並且設置為10行,5列
//方法2:
QTableWidget *tableWidget = new QTableWidget;
tableWidget->setRowCount(10); //設置行數為10
tableWidget->setColumnCount(5); //設置列數為5
- 表頭的設置
QStringList header;
header<<"Month"<<"Description";
tableWidget->setHorizontalHeaderLabels(header);
- 表格內容設置
tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
tableWidget->show();
2、表格編輯屬性
- 在默認情況下,表格里的字符是可以更改的,比如雙擊一個單元格,就可以修改原來的內容,如果想禁止用戶的這種操作,讓這個表格對用戶只讀,也是可以進行設置的。
原型:tableWidget->setEditTriggers(QAbstractItemView::EditTrigger);
QAbstractItemView.EditTrigger參數有多個,QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚舉中的一個。
參數 | XX | XX |
---|---|---|
QAbstractItemView.NoEditTriggers | 0 | 不能對表格內容進行修改 |
QAbstractItemView.CurrentChanged | 1 | 任何時候都能對單元格修改 |
QAbstractItemView.DoubleClicked | 2 | 雙擊單元格 |
QAbstractItemView.SelectedClicked | 4 | 單擊已選中的內容 |
QAbstractItemView.CurrentChanged | 8 | 任何時候都能對單元格修改 |
QAbstractItemView.AnyKeyPressed | 16 | 雙擊單元格 |
QAbstractItemView.AllEditTriggers | 31 | 雙擊單元格 |
3、單元格選中屬性
- 整行選中
原型: tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行選中的方式
參數 | 含義 |
---|---|
QAbstractItemView.SelectItems | 選中單個單元格 |
QAbstractItemView.SelectRows | 選中一行 |
QAbstractItemView.SelectColumns | 選中一列 |
- 單個選中和多個選中的設置
原型:tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設置為可以選中多個目標
參數 | 含義 |
---|---|
QAbstractItemView.NoSelection | 不能選擇 |
QAbstractItemView.SingleSelection | 選中單個目標 |
QAbstractItemView.MultiSelection | 選中多個目標 |
3、表頭的顯示與隱藏
- 對於水平或垂直方法的表頭,可以用以下方式進行 隱藏/顯示 的設置。
//注意:需要 #include <QHeaderView>
tableWidget->verticalHeader()->setVisible(false); //隱藏列表頭
tableWidget->horizontalHeader()->setVisible(false); //隱藏行表頭
4、單元格字體設置
QTableWidgetItem *item = new QTableWidgetItem("Apple");
item->setBackgroundColor(QColor(0,60,10));
item->setTextColor(QColor(200,111,100));
item->setFont(QFont("Helvetica"));
tableWidget->setItem(0,3,item);
//另:如果需要對所有的單元格都使用這種字體,則可以使用 tableWidget->setFont(QFont("Helvetica"));
5、設置單元格內文字的對齊方式
使用newItem.setTextAlignment()函數進行設置,該函數的參數為單元格內的對齊方式,和字符輸入順序是自左相右還是自右向左,如果兩種都要設置,只要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可 。
//方法
ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignCenter);
//方法
QTableWidgetItem *t_test = new QTableWidgetItem(xList);
t_test->setTextAlignment(Qt::AlignCenter);
6、合並單元格
tableWidget->setSpan(0, 0, 3, 1) //# 其參數為: 要改變單元格的 1行數 2列數 要合並的 3行數 4列數
7、設置行列寬
- 指定行列寬
//方法一:
tableWidget->setColumnWidth(3,200);
tableWidget->setRowHeight(3,60);
//方法二:
ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::fix); //指定列寬
ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::fix); //制定行高
- 自動調整行列寬
//根據內容自動調整所有行的行高
//方法一:
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
//方法二:
ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); 自適應列寬
ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch); 自適應行高
//根據內容自動調整某一行的行高
tableWidget->resizeColumnsToContents(2);//2行
tableWidget->resizeRowsToContents(2);
//另類表格效果:
table->horizontalHeader()->setStretchLastSection(true); //其它列保持默認寬度,最后一列拉伸填滿。
8、其它示例設置
int rowIndex = m_pAttrbuteList->rowCount();
tableWidget->setRowCount(rowIndex + 1);//總行數增加1
tableWidget->setRowHeight(rowIndex, 24);//設置行的高度
--------------------------------------------------------------------------------
QTableWidget *table = new QTableWIdget(this);
table->setColumnCount(5); //設置列數
table->setRowCount(3); //設置行數/
/*設置列名*/
QStringList headers;
headers<<"列名1"<<"列名2"<<"列名3";
table->setHorizontalHeaderLabels(headers);
/*給單元格添加內容*/
void addItemContent(int row, int column, QString content)
{
QTableWidgetItem *item = new QTableWidgetItem (content);
table->setItem(row, column, item);
}
/*給單元格中增加圖標*/
QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL); //只加入圖標,沒有字符串
QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString); //加入圖標和字符串
table->setItem(row, column, item);
/*插入一行*/
int row = table->rowCount();
table->insertRow(row);
/*插入一列*/
int column = table->columnCount();
table->insertColumn(column);
//使行列頭自適應寬度,最后一列將會填充空白部分
table->horizontalHeader()->setStretchLastSection(true);
//使行列頭自適應寬度,所有列平均分來填充空白部分
table->horizontalHeader()->setResizeMode(QHeaderView::Strtch);
//使行自適應高度,假如行很多的話,行的高度不會一直減小,當達到一定值時會自動生成一個QScrollBar
table->verticalHeader()->setResizeMode(QHeaderView::Strtch);
//設置單擊選擇一行
table->setSelectionBehuavior(QAbstractItemView::SelectRows);
//設置每行內容不可編輯
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
//設置只能選擇一行,不能選擇多行
table->setSelectionMode(QAbstractItemView::SingleSelection);
/*去掉每行的行號*/
QHeaderView *headerView = table->verticalHeader();
headerView->setHidden(true);
/*設置讓某個單元格或某行選中*/
選中單元格:table->setCurrentCell(row, column, QItemSelectionModel::Select);
選中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此處的列沒有值)