1. 程式人生 > 程式設計 >Qt GUI圖形影象開發之Qt表格控制元件QTableView簡單使用方法及QTableView與QTableWidget區別

Qt GUI圖形影象開發之Qt表格控制元件QTableView簡單使用方法及QTableView與QTableWidget區別

QTableView是Qt中用來把資料集以表格形式提供給使用者的一個控制元件

QTableView類實現表格檢視,QTableView的資料由繼承QAbstractItemModel的子類models來提供

#include<QStandardItemModel>
  QStandardItemModel *model = new QStandardItemModel();
  ui->tableView->setModel(model);

一、新增表頭:

  model->setColumnCount(2);
  model->setHeaderData(0,Qt::Horizontal,"卡號");
  model->setHeaderData(1,"姓名");

二、設定表格屬性:

ui->tableView->setModel(model);
//表頭資訊顯示居左
ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);

水平對齊方式有:

Constant Value Description
Qt.AlignLeft 0x0001 Aligns with the left edge.
Qt.AlignRight 0x0002 Aligns with the right edge.
Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
Qt.AlignJustify 0x0008 Justifies the text in the available space.

垂直對齊方式:

Constant Value Description
Qt.AlignTop 0x0020 Aligns with the top.
Qt.AlignBottom 0x0040 Aligns with the bottom.
Qt.AlignVCenter 0x0080 Centers vertically in the available space.

如果兩種都要設定,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可

//設定列寬不可變
ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);
ui->tableView->setColumnWidth(0,101);
ui->tableView->setColumnWidth(1,102);

注:在進行表格設定時必須是“ui->tableView->setModel(model);”在前,屬性具體設定在後,

反之則設定不會生效。如上述程式碼所示。

三、新增行(新增三行一樣的資訊):

 for(int i = 0; i < 3; i++)
 {
     model->setItem(i,new QStandardItem("2009441676"));
        //設定字元顏色
     model->item(i,0)->setForeground(QBrush(QColor(255,0)));
        //設定字元位置
     model->item(i,0)->setTextAlignment(Qt::AlignCenter);
     model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈")));
 }

四、為單元格新增圖示

  tableWidget->setItem(0,new QTableWidgetItem("Jan")); 
  tableWidget->setItem(1,new QTableWidgetItem("Feb")); 
  tableWidget->setItem(2,new QTableWidgetItem("Mar")); 
  
  tableWidget->setItem(0,new QTableWidgetItem(QIcon("images/IED.png"),"Jan's month")); 
  tableWidget->setItem(1,"Feb's month")); 
  tableWidget->setItem(2,"Mar's month"));

Qt GUI圖形影象開發之Qt表格控制元件QTableView簡單使用方法及QTableView與QTableWidget區別

五、刪除行:

//x是指定刪除哪一行
model->removeRow(x);
//刪除所有行
model->removeRows(0,model->rowCount());

六、取表格(3,3)文字

model->item(3,3)->text()

七、設定表格(3,3)->setText("123");

八、禁止編輯

ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);  //禁止編輯

九、選擇整行

ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);  //選擇整行

Constant

Value

Description

QAbstractItemView.SelectItems

0

Selecting single items.選中單個單元格

QAbstractItemView.SelectRows

1

Selecting only rows.選中一行

QAbstractItemView.SelectColumns

2

Selecting only columns.選中一列

十、選擇方式:

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設定為可以選中多個目標

該函式的引數還可以是:

QAbstractItemView.NoSelection      不能選擇

QAbstractItemView.SingleSelection  選中單個目標

QAbstractItemView.MultiSelection    選中多個目標

QAbstractItemView.ExtendedSelection   QAbstractItemView.ContiguousSelection 的區別不明顯,主要功能是正常情況下是單選,但按下Ctrl或Shift鍵後,可以多選

十一、表格表頭的顯示與隱藏

對於水平或垂直方法的表頭,可以用以下方式進行 隱藏/顯示 的設定:

tableWidget->verticalHeader()->setVisible(false);  //隱藏列表頭  
tableWidget->horizontalHeader()->setVisible(false); //隱藏行表頭 

十二、對錶頭文字的字型、顏色進行設定

QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水平方向表頭的Item物件   
columnHeaderItem0->setFont(QFont("Helvetica")); //設定字型   
columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設定單元格背景顏色   
columnHeaderItem0->setTextColor(QColor(200,111,30)); //設定文字顏色

十三、在單元格里加入控制元件:

QTableWidget不僅允許把文字加到單元格,還允許把控制元件也放到單元格中。比如,把一個下拉框加入單元格,可以這麼做:

QComboBox *comBox = new QComboBox(); 
comBox->addItem("Y"); 
comBox->addItem("N"); 
tableWidget->setCellWidget(0,2,comBox); 

十四、合併單元格

tableWidget->setSpan(0,3,1) //其引數為: 要改變單元格的  1行數 2列數   要合併的 3行數 4列數

十五、獲取被單擊表格內容

通過實現 itemClicked (QTableWidgetItem *) 訊號的槽函式,就可以獲得滑鼠單擊到的單元格指標,進而獲得其中的文字資訊

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));
//將itemClicked訊號與函式getItem繫結

QTableWidget和QTableView的區別:

QTableWidget是QTableView的子類。

主要的區別是QTableView可以使用自定義的資料模型來顯示內容(也就是先要通過setModel來繫結資料來源),而QTableWidget則只能使用標準的資料模型,並且其單元格資料是QTableWidgetItem的物件來實現的(也就是不需要資料來源,將逐個單元格內的資訊填好即可)。

這主要體現在QTableView類中有setModel成員函式,而到了QTableWidget類中,該成員函式變成了私有。

使用QTableWidget就離不開QTableWidgetItem。QTableWidgetItem用來表示表格中的一個單元格,正個表格都需要用逐個單元格構建起來。

本文簡單介紹了Qt表格控制元件QTableView簡單使用方法及QTableView與QTableWidget區別,更多關於Qt表格控制元件QTableView使用技巧請檢視下面的相關連結