Qt中QTableWidget用法總結

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

?

 1 #include <QtGui/QApplication>
2 #include <QTableWidget>
3 #include <QTableWidgetItem>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 QTableWidget *tableWidget = new QTableWidget(10,5); // 構造了一個QTableWidget的對象,并且設置為10行,5列
9 // 也可用下面的方法構造QTableWidget對象
10 // QTableWidget *tableWidget = new QTableWidget;
11 // tableWidget->setRowCount(10); //設置行數為10
12 // tableWidget->setColumnCount(5); //設置列數為5
13 tableWidget->setWindowTitle("QTableWidget & Item");
14 tableWidget->resize(350, 200); //設置表格
15 QStringList header;
16 header<<"Month"<<"Description";
17 tableWidget->setHorizontalHeaderLabels(header);
18 tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
19 tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
20 tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));
21
22 tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));
23 tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));
24 tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));
25 tableWidget->show();
26
27 return a.exec();
28 }

?

?

一. 對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. 表格表頭的顯示與隱藏

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

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

?

注意:需要 #include<QHeaderView>

?

5. 對表頭文字的字體、顏色進行設置

1     QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水平方向表頭的Item對象
2 columnHeaderItem0->setFont(QFont("Helvetica")); //設置字體
3 columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設置單元格背景顏色
4 columnHeaderItem0->setTextColor(QColor(200,111,30)); //設置文字顏色

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不僅允許把文字加到單元格,還允許把控件也放到單元格中。比如,把一個下拉框加入單元格,可以這么做:

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

二. 對單元格的進行設置

1. 單元格設置字體顏色和背景顏色 及字體字符

1     QTableWidgetItem *item = new QTableWidgetItem("Apple");
2 item->setBackgroundColor(QColor(0,60,10));
3 item->setTextColor(QColor(200,111,100));
4 item->setFont(QFont("Helvetica"));
5 tableWidget->setItem(0,3,item);

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()函數即可,該函數的參數為單元格內的對齊方式,和字符輸入順序是自左相右還是自右向左。

水平對齊方式有:

ConstantValueDescription
Qt.AlignLeft0x0001Aligns with the left edge.
Qt.AlignRight0x0002Aligns with the right edge.
Qt.AlignHCenter0x0004Centers horizontally in the available space.
Qt.AlignJustify0x0008Justifies the text in the available space.

?

垂直對齊方式:

ConstantValueDescription
Qt.AlignTop0x0020Aligns with the top.
Qt.AlignBottom0x0040Aligns with the bottom.
Qt.AlignVCenter0x0080Centers vertically in the available space.

?

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

?

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

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

?

4. 設置單元格的大小

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

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

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

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

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

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);//去掉自動滾動

轉載于:https://www.cnblogs.com/elect-fans/archive/2012/03/21/2408566.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379877.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]軟件架構師書單

"其實中國程序員&#xff0c;現在最需要的是一張安靜的書桌。"&#xff0c;的確&#xff0c;中國架構師大多缺乏系統的基礎知識&#xff0c;與其自欺欺人的宣揚"讀書無用&#xff0c;重在實踐變通&#xff0c;修身立命哲學書更重要"&#xff0c;把大好時間…

Java——List集合特有的功能

* List也是一個接口&#xff0c;這說明List不能new&#xff0c;其中它有一個子類ArrayList&#xff0c;所以&#xff0c;就可以父類引用指向子類對象調用* List里面特有的方法&#xff1a;* * void add(int index,E element)在列表的指定位置插入指定元素&#xff08;可選操作&…

python免殺技術---復現+改進----1

0x01 復現 復現文章&#xff1a;https://mp.weixin.qq.com/s?__bizMzI3MzUwMTQwNg&mid2247484733&idx2&sn5b8f439c2998ce089eb44541d2da7a15&chksmeb231%E2%80%A6 首先用cobaltstruke生成一個python的payload腳本 然后復制里面的payload進行Base64編碼&…

python擲骰子_用于擲骰子的Python程序(2人骰子游戲)

python擲骰子Here, we will be going to design a very simple and easy game and implement it using abstract data class. The code consists of two different classes (The base of the whole program). The one will be the class for the player and others will be for…

ForeignKey和ManyToManyField的限制關系

authorsmodels.ManyToManyField(Author,limit_choice_to{name__endswith:Smith}這樣可以更方便的查詢。轉載于:https://www.cnblogs.com/chenjianhong/archive/2012/03/22/4145158.html

linux 目錄命令_Linux目錄命令能力問題和解答

linux 目錄命令This section contains Aptitude Questions and Answers on Linux Directory Commands. 本節包含有關Linux目錄命令的 Aptitude問答。 1) There are the following statements that are given which of them are correct about Linux commands? In the Linux o…

終于在HP2133上成功安裝xp

今天拿到一臺HP2133迷你筆記本&#xff0c;原裝vista home basic&#xff0c;由于本人是在不喜歡vista&#xff0c;于是決定將使用xp換之。 很久沒有研究裝系統了&#xff0c;HP2133沒有光驅&#xff0c;以前也沒啥這方面經驗&#xff0c;搞這個玩意安裝完軟件折騰了大半天&…

Java——GUI(圖形用戶界面設計)

事件處理&#xff1a;事件&#xff1a;用戶的一個操作(例如&#xff1a;點擊一下鼠標&#xff0c;或者敲擊一下鍵盤)事件源&#xff1a;被操作的組件(例如&#xff1a;在一個窗體中的一個按鈕&#xff0c;那個按鈕就屬于被操作的組件&#xff0c;按鈕就是事件源)監聽器&#xf…

python安全攻防---信息收集---IP查詢

IP查詢是通過當前所獲得的URL去查詢對應IP地址的過程&#xff0c;可應用Socket庫函數中的gethostbyname()獲取域名所對用的IP值 程序如下&#xff1a; # -*- coding:utf-8 -*- IP查詢import socket ip socket.gethostbyname(www.baidu.com) print(ip)運行結果&#xff1a; …

智能課程表Android版-學年學期星期的實現

上次我們實現了日期和時間的動態顯示&#xff0c;這次我們來實現學年&#xff0c;學期&#xff0c;周次的顯示&#xff0c;如圖: 首先是學年學期的顯示&#xff1a; Calendar cCalendar.getInstance(); int yearc.get(Calendar.YEAR); int monthc.get(Calendar.MONTH)1;//Calen…

感染linux腳本程序技術

前言 ---- 本文來源于29A病毒雜志,其上對linux shell病毒技術有了一個綜合的闡述,我不想翻譯它,我以它的那篇為模板 寫了這篇中文的文章,里面的代碼我都做了調試. 對于shell編程的程序員來說所謂的shell病毒技術其實根本就是小牛一毛,這點在大家看完本文后就會有所體會 但,簡單…

Java——設計模式(簡單工廠模式)

* A:簡單工廠模式概述* 簡單工廠模式又叫靜態工廠方法模式&#xff0c;它定義了一個具體的工廠類負責創建一些類的實例* B&#xff1a;優點* 客戶端不需要再負責對象的創建&#xff0c;從而明確了各個類的職責* 簡單來說&#xff0c;客戶端你只需要用就可以了&#xff0c;就…

Java ObjectOutputStream writeFloat()方法與示例

ObjectOutputStream類writeFloat()方法 (ObjectOutputStream Class writeFloat() method) writeFloat() method is available in java.io package. 在java.io包中提供了writeFloat()方法 。 writeFloat() method is used to write the given 4 bytes of a float value. writeFl…

python安全攻防---信息收集---whois查詢

whois是用來查詢域名的IP以及所有者信息的傳輸協議。簡單地說&#xff0c;whois就是一個數據庫&#xff0c;用來查詢域名是否以及被注冊&#xff0c;以及注冊域名的詳細信息&#xff08;如域名所有人、域名注冊商等&#xff09;。 使用whois查詢&#xff0c;首先通過pip安裝py…

百度面試題:從輸入url到顯示網頁,后臺發生了什么?

參考http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作為一個軟件開發者&#xff0c;你一定會…

VS2005無法啟動修復辦法

c:\Program Files\Microsoft Visual Studio 8\Common7\IDE>devenv /ResetSkipPkgs 轉載于:https://www.cnblogs.com/doc/archive/2008/10/10/1307887.html

Java——設計模式(工廠方法模式)

* A:工廠方法模式概述* 工廠方法模式中抽象工廠類負責定義創建對象的接口&#xff0c;具體對象的創建工作由繼承抽象工廠的具體類實現。* 簡單來說&#xff1a;先定義一個工廠&#xff0c;工廠里面有些方法&#xff0c;這些方法就是用來創建動物的&#xff0c;然后有很多子工…

python安全攻防---爬蟲基礎---get和post提交數據

get提交數據1 get提交的數據就附在提交給服務器的url之后&#xff0c;以&#xff1f;開頭參數之間以&隔開&#xff0c;例如/admin/user/123456.aspx?name123&id123 案例&#xff1a;寫個腳本&#xff0c;在sogou自動搜索周杰倫&#xff0c;并將搜索頁面的數據獲取 程…

JavaMail中解決中文附件名亂碼的問題

網上有很多類似的解決方案&#xff0c;很多是使用 if ((fileName ! null) && (fileName.toLowerCase().indexOf("gb2312") ! -1)){ fileName MimeUtility.decodeText(fileName); } 來解決&#xff0c;但對應gbk編碼的附件名&#xff0c;這里仍不能正確處…

Java ObjectOutputStream writeBytes()方法與示例

ObjectOutputStream類writeBytes()方法 (ObjectOutputStream Class writeBytes() method) writeBytes() method is available in java.io package. writeBytes()方法在java.io包中可用。 writeBytes() method is used to write the given string as a sequence of bytes. write…