QTableWidget行選中/刪除/添加行


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);(注意此處的列沒有值)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM