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開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。 在獲取時間之前要先獲