1 均分各列
1 tableWidget->horizontalHeader()->setStretchLastSection(true); //就是這個地方 2 tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
2 整行選中:
1 tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //設置選擇行為,以行為單位 2 tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //設置選擇模式,選擇單行
3 刪除選中的整行
1 int rowIndex = m_pAttrbuteList->currentRow(); 2 if (rowIndex != -1) 3 tableWidget->removeRow(rowIndex);
為了將數據能夠在界面中顯示的更清楚一些,在這里應用到了tableWidget控件,現將該控件中刪除指定行的代碼介紹如下:
QTable里有一個removeRow(int i)函數用來刪除當前行,但是如果我們沒有對於table進行任何的選中,那么QTable是如何返回的呢?
用Qt Creator里拖了一個tableWidget,加一個按鈕,點擊刪除后執行
1 int i = ui->tableWidget->currentRow(); 2 QMessageBox msg; 3 msg.setText(QString::number(i)); 4 msg.exec(); 5 ui->tableWidget->removeRow(i);
在不選擇行的情況下發現每次點擊后刪除的都是第一行,i的輸出都是0.
原因其實很簡單,就是因為table的當前焦點在第一樣的第一個單元格所導致的,解決的辦法就是讓table失去焦點,在構造函數里面添加ui->tableWidget->setFocusPolicy(Qt::NoFocus);
然后再試,發現點擊刪除按鈕如果不選中行的話是不能刪除的,返回的i此時是-1。
控件剛開始的時候左邊默認自帶序列號,如果想去掉左邊的行號,加上下面的代碼就可以了。
1 QHeaderView* headerView = table的名字->verticalHeader(); 2 headerView->setHidden(true);
4 添加整行
1 int rowIndex = m_pAttrbuteList->rowCount(); 2 tableWidget->setRowCount(rowIndex + 1);//總行數增加1 3 4 tableWidget->setRowHeight(rowIndex, 24);//設置行的高度 5 6 -------------------------------------------------------------------------------- 7 8 QTableWidget *table = new QTableWIdget(this); 9 10 table->setColumnCount(5); //設置列數 11 12 table->setRowCount(3); //設置行數/ 13 14 /*設置列名*/ 15 16 QStringList headers; 17 18 headers<<"列名1"<<"列名2"<<"列名3"; 19 20 table->setHorizontalHeaderLabels(headers); 21 22 /*給單元格添加內容*/ 23 24 void addItemContent(int row, int column, QString content) 25 26 { 27 28 QTableWidgetItem *item = new QTableWidgetItem (content); 29 30 table->setItem(row, column, item); 31 32 } 33 34 /*給單元格中增加圖標*/ 35 36 QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL); //只加入圖標,沒有字符串 37 38 QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString); //加入圖標和字符串 39 40 table->setItem(row, column, item); 41 42 /*插入一行*/ 43 44 int row = table->rowCount(); 45 46 table->insertRow(row); 47 48 /*插入一列*/ 49 50 int column = table->columnCount(); 51 52 table->insertColumn(column); 53 54 //使行列頭自適應寬度,最后一列將會填充空白部分 55 56 table->horizontalHeader()->setStretchLastSection(true); 57 58 //使行列頭自適應寬度,所有列平均分來填充空白部分 59 60 table->horizontalHeader()->setResizeMode(QHeaderView::Strtch); 61 62 //使行自適應高度,假如行很多的話,行的高度不會一直減小,當達到一定值時會自動生成一個QScrollBar 63 64 table->verticalHeader()->setResizeMode(QHeaderView::Strtch); 65 66 //設置單擊選擇一行 67 68 table->setSelectionBehuavior(QAbstractItemView::SelectRows); 69 70 //設置每行內容不可編輯 71 72 table->setEditTriggers(QAbstractItemView::NoEditTriggers); 73 74 //設置只能選擇一行,不能選擇多行 75 76 table->setSelectionMode(QAbstractItemView::SingleSelection); 77 78 /*去掉每行的行號*/ 79 80 QHeaderView *headerView = table->verticalHeader(); 81 82 headerView->setHidden(true); 83 84 /*設置讓某個單元格或某行選中*/ 85 86 選中單元格:table->setCurrentCell(row, column, QItemSelectionModel::Select); 87 88 選中一行:table->setCurrentCell(row, QItemSelectionModel::Select);(注意此處的列沒有值)