1. 程式人生 > >QT QTableWidget 用法總結

QT QTableWidget 用法總結

 QTableWidget是QT程式中常用的顯示資料表格的空間,很類似於VC、C#中的DataGrid。說到QTableWidget,就必須講一下它跟QTabelView的區別了。QTableWidget是QTableView的子類,主要的區別是QTableView可以使用自定義的資料模型來顯示內容(也就是先要通過setModel來繫結資料來源),而QTableWidget則只能使用標準的資料模型,並且其單元格資料是QTableWidgetItem的物件來實現的(也就是不需要資料來源,將逐個單元格內的資訊填好即可)。這主要體現在QTableView類中有setModel成員函式,而到了QTableWidget類中,該成員函式變成了私有。使用QTableWidget就離不開QTableWidgetItem。QTableWidgetItem用來表示表格中的一個單元格,正個表格都需要用逐個單元格構建起來。

#include <QtGui/QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTableWidget *tableWidget = new QTableWidget(10,5); // 構造了一個QTableWidget的物件,並且設定為10行,5列
    //    也可用下面的方法構造QTableWidget物件
    //    QTableWidget *tableWidget = new QTableWidget;
    //    tableWidget->setRowCount(10);     //設定行數為10
    //    tableWidget->setColumnCount(5);   //設定列數為5
    tableWidget->setWindowTitle("QTableWidget & Item");
    tableWidget->resize(350, 200);  //設定表格
    QStringList header;
    header<<"Month"<<"Description";
    tableWidget->setHorizontalHeaderLabels(header);
    tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
    tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
    tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));

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

    return a.exec();
}


一. 對QTableWidget本身的效果實現

1. 將表格變為禁止編輯

在預設情況下,表格裡的字元是可以更改的,比如雙擊一個單元格,就可以修改原來的內容,如果想禁止使用者的這種操作,讓這個表格對使用者只讀,可以這樣:

 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger列舉中的一個,都是觸發修改單元格內容的條件:

QAbstractItemView.NoEditTriggers

0

No editing possible. 不能對錶格內容進行修改

QAbstractItemView.CurrentChanged

1

Editing start whenever current item changes.任何時候都能對單元格修改

QAbstractItemView.DoubleClicked

2

Editing starts when an item is double clicked.雙擊單元格

QAbstractItemView.SelectedClicked

4

Editing starts when clicking on an already selected item.單擊已選中的內容

QAbstractItemView.EditKeyPressed

8

Editing starts when the platform edit key has been pressed over an item.

QAbstractItemView.AnyKeyPressed

16

Editing starts when any key is pressed over an item.按下任意鍵就能修改

QAbstractItemView.AllEditTriggers

31

Editing starts for all above actions.以上條件全包括

2. 設定表格為整行選擇

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行選中的方式

QAbstractItemView.SelectionBehavior列舉還有如下型別

Constant

Value

Description

QAbstractItemView.SelectItems

0

Selecting single items.選中單個單元格

QAbstractItemView.SelectRows

1

Selecting only rows.選中一行

QAbstractItemView.SelectColumns

2

Selecting only columns.選中一列

3.單個選中和多個選中的設定:

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

該函式的引數還可以是:

QAbstractItemView.NoSelection      不能選擇

QAbstractItemView.SingleSelection  選中單個目標

QAbstractItemView.MultiSelection    選中多個目標

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

4. 表格表頭的顯示與隱藏

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

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

注意:需要 #include <QHeaderView>

5. 對錶頭文字的字型、顏色進行設定

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

注意:需要 #include <QHeaderView>

6. 在單元格里加入控制元件:

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

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

讀取QComboBox 資訊:

QWidget * widget=ui->tableWidget->cellWidget(i,0);//獲得widget   
QComboBox *combox=(QComboBox*)widget;//強制轉化為QComboBox     
QString string=combox->currentText();  
qDebug()<<string;


二. 對單元格的進行設定

1. 單元格設定字型顏色和背景顏色 及字型字元

    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"));

2. 設定單元格內文字的對齊方式

這個比較簡單,使用newItem.setTextAlignment()函式即可,該函式的引數為單元格內的對齊方式,和字元輸入順序是自左相右還是自右向左。

水平對齊方式有:

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 的方式即可

3. 合併單元格效果的實現:

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

4. 設定單元格的大小

首先,可以指定某個行或者列的大小

    tableWidget->setColumnWidth(3,200);
    tableWidget->setRowHeight(3,60);

還可以將行和列的大小設為與內容相匹配

    tableWidget->resizeColumnsToContents();
    tableWidget->resizeRowsToContents();


5. 獲得單擊單元格的內容

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

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));

//將itemClicked訊號與函式getItem繫結


6.QTableWidget要調整表格行寬主要涉及以下一個函式

resizeColumnsToContents();                      根據內容調整列寬          
resizeColumnToContents(int col);               根據內容自動調整給定列寬
horizontalHeader()->setResizeMode           把給定列設定為給定模式
主要模式有Stretch和Fixed

7.

int row = rowCount();
 removeRow(row);//清除已有的行列
 setShowGrid(true);//顯示錶格線
 verticalHeader()->setVisible(false);//隱藏左邊垂直
 QHeaderView *headerView = horizontalHeader();
 headerView->setMovable(false);//去除表頭的移動
 headerView->resizeSection(0,284);//設定第一列寬
 headerView->resizeSection(1,127);//設定第二列寬
 headerView->setResizeMode(QHeaderView::Fixed);//列表不能移動
 headerView->setClickable(false);//不響應滑鼠單擊
 setEditTriggers(QTableWidget::NoEditTriggers);//不能編輯
 setSelectionBehavior(QTableWidget::SelectRows);//一次選中一行
 setSelectionMode(QAbstractItemView::SingleSelection);//只能單選
 /*QScrollBar *scrollBar = horizontalScrollBar();
 scrollBar->hide();*/
 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滾動條
 setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滾動條按項移動
 setAutoScroll(false);//去掉自動滾動

 

相關推薦

QT QTableWidget 用法總結

 QTableWidget是QT程式中常用的顯示資料表格的空間,很類似於VC、C#中的DataGrid。說到QTableWidget,就必須講一下它跟QTabelView的區別了。QTableWidget是QTableView的子類,主要的區別是QTableView可以使用

QTableWidget用法總結

轉載:https://blog.csdn.net/u010002704/article/details/40071467 1.QTableWidget不能在mainwindow中隨主視窗的大小變化?   解決:在表格外部添加布局。   程式碼:&n

Qtablewidget用法總結,還不錯!

2018年11月01日 09:42:34 一隻笨鳥 閱讀數:5 個人分類: Qt

Qt學習:QLineEdit的用法總結

window 軟件 編程 計算機 qt 在使用Qt編寫軟件時,QLineEdit這個部件經常會被用到,大部分用在登錄界面的輸入框,所以這個部件非常的重要.常用成員函數: 1.void setClearButtonEnabled(bool); //是否設置一個清空按鈕. 點擊這個清空按鈕後,

Qt學習筆記(八)——QLineEdit的用法總結

常用成員函式:  1.void setClearButtonEnabled(bool); //是否設定一個清空按鈕.  點選這個清空按鈕後,就會自動刪除行編輯框內的所有內容,類似於clear().  2.void setEchoMode(QLineEdit::EchoM

git branch用法總結

如果 命名 參數 war blank org 2.6 重命名 scm Git branch git branch 不帶參數:列出本地已經存在的分支,並且在當前分支的前面加“*”號標記,例如: #git branch* master

numpy中一些常用函數的用法總結

num matrix 空白 記錄 維數 補充 結果 創建 array 先簡單記錄一下,後續補充詳細的例子 1. strip()函數 s.strip(rm):s為字符串,rm為要刪除的字符序列 只能刪除開頭或是結尾的字符或者字符串。不能刪除中間的字符或是字符串 當rm為空

數組去重,call、apply、bind之間的區別,this用法總結

步驟 -- 之間 undefined 定義 ply clas turn 需要 一、數組去重,直接寫到Array原型鏈上。 1 //該方法只能去除相同的數字 不會去判斷24和‘24‘是不同的 所有數字和字符串數字是相同是重復的 2 Array.prototype

JavaSE(一) IO類層次關系和各種IO流的用法總結

思想 單位 out 9.png 什麽 輸入流 謝謝 混亂 體系       今天把IO流的這一知點進行一下總結,因為在之前使用io流的時候,就只知道幾個重點常用的IO類,比如FileInputStream,BufferedInputStream(緩沖流)等等,但是不知道它處

netty用法總結

ram sed 解碼 coder fff ade med 長度 bte /**decoder和encoder,如果不需要解析,就使用系統的 * ch.pipeline().addLast(new StringDecoder()); * ch.pipeline().add

delphi CxGrid用法總結(63問)

重復 註釋 ccid nvi while ren 數據顯示 ray 序號 1. 去掉cxGrid中臺頭的Box 解決:在tableview1的optionsview的groupbybox=false; **********************************

Oracle中Merge into用法總結 (轉載)

字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因:   前段時間,因為涉及到一張表的大數據操作,要同時

Java中static關鍵字用法總結

副本 大括號 跟著 rac clas main 靜態成員變量 abstract 全局變量 1. 靜態方法 通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法 聲明為static的方法有以下幾條限制: · 它們僅能調用其他的sta

c/c++中const用法總結

沒有 pan 分配 值類型 變量初始化 _id 多少 部分 參數 1、修飾常量時:   const int temp1; //temp1為常量,不可變   int const temp2; //temp2為常量,不可變 2、修飾指針時:   主要看const在*的前後,

SVN switch 用法總結

完全 如果 jpg 進入 空間 簡單 src 控制 用法總結 一直知道SVN有個switch命令,但是對它的介紹教程卻很少,大多是生硬的svn幫助文檔裏的文字,從而一直不怎麽會用。今天看了這篇文章,突覺豁然開朗,整理下來以備查閱。 使用SVN,自然是需要與別人合作開發才能體

Java中instanceof關鍵字的用法總結

animal copy false 運算 erl 一個 strong 以及 繼承 instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,

IrisSkin2.dll用法總結——WinForm窗體換膚總結

c/c++今天使用IrisSkin2.dll來對WinForm窗體換膚,遇到了很多問題。 我是直接用VS2010建的一個工程然後引用該dll文件,結果調試的時候出現了錯誤,錯誤信息如下:錯誤 1 未能找到類型或命名空間名稱“Sunisoft”(是否缺少 using 指令或程序集引用?) 後來看了別人寫的一個軟

C/C++:static用法總結

.sh pre 值類型 定義和使用 靜態 public out pan -1 前言:static是C/C++中一個很重要的關鍵字,最近閱讀了很多博客和資料,遂在此對自己的學習筆記進行簡單的總結並發表在這裏 一、C語言中的static ? 靜態全局變量:在全局變量之前加

Java習慣用法總結

保持 lock 學習 util catch %20 bject 負數 rac 在Java編程中,有些知識 並不能僅通過語言規範或者標準API文檔就能學到的。在本文中,我會盡量收集一些最常用的習慣用法,特別是很難猜到的用法。(Joshua Bloch的《Effective J

Android中Calendar類的用法總結

jsb ews 寫法 需要 key data- minute bar 來講 Calendar是Android開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。 在獲取時間之前要先獲