Qt GUI圖形圖像開發(fā)之Qt表格控件QTableView簡(jiǎn)單使用方法及QTableView與QTableWidget區(qū)別
QTableView是Qt中用來(lái)把數(shù)據(jù)集以表格形式提供給用戶的一個(gè)控件
QTableView類實(shí)現(xiàn)表格視圖,QTableView的數(shù)據(jù)由繼承QAbstractItemModel的子類models來(lái)提供
#include<QStandardItemModel> QStandardItemModel *model = new QStandardItemModel(); ui->tableView->setModel(model);
一、添加表頭:
model->setColumnCount(2); model->setHeaderData(0,Qt::Horizontal,"卡號(hào)"); model->setHeaderData(1,Qt::Horizontal,"姓名");
二、設(shè)置表格屬性:
ui->tableView->setModel(model); //表頭信息顯示居左 ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
水平對(duì)齊方式有:
| 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. |
垂直對(duì)齊方式:
| 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. |
如果兩種都要設(shè)置,只要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可
//設(shè)置列寬不可變 ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed); ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed); ui->tableView->setColumnWidth(0,101); ui->tableView->setColumnWidth(1,102);
注:在進(jìn)行表格設(shè)置時(shí)必須是“ui->tableView->setModel(model);”在前,屬性具體設(shè)置在后,
反之則設(shè)置不會(huì)生效。如上述代碼所示。
三、添加行(添加三行一樣的信息):
for(int i = 0; i < 3; i++)
{
model->setItem(i,0,new QStandardItem("2009441676"));
//設(shè)置字符顏色
model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0)));
//設(shè)置字符位置
model->item(i,0)->setTextAlignment(Qt::AlignCenter);
model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈")));
}
四、為單元格添加圖標(biāo)
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"));

五、刪除行:
//x是指定刪除哪一行 model->removeRow(x); //刪除所有行 model->removeRows(0,model->rowCount());
六、取表格(3,3)文本
model->item(3,3)->text()
七、設(shè)置表格(3,3)文本
model->item(3,3)->setText("123");
八、禁止編輯
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止編輯
九、選擇整行
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //選擇整行
|
Constant |
Value |
Description |
|---|---|---|
|
QAbstractItemView.SelectItems |
0 |
Selecting single items.選中單個(gè)單元格 |
|
QAbstractItemView.SelectRows |
1 |
Selecting only rows.選中一行 |
|
QAbstractItemView.SelectColumns |
2 |
Selecting only columns.選中一列 |
十、選擇方式:
tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //設(shè)置為可以選中多個(gè)目標(biāo)
該函數(shù)的參數(shù)還可以是:
QAbstractItemView.NoSelection 不能選擇
QAbstractItemView.SingleSelection 選中單個(gè)目標(biāo)
QAbstractItemView.MultiSelection 選中多個(gè)目標(biāo)
QAbstractItemView.ExtendedSelection QAbstractItemView.ContiguousSelection 的區(qū)別不明顯,主要功能是正常情況下是單選,但按下Ctrl或Shift鍵后,可以多選
十一、表格表頭的顯示與隱藏
對(duì)于水平或垂直方法的表頭,可以用以下方式進(jìn)行 隱藏/顯示 的設(shè)置:
tableWidget->verticalHeader()->setVisible(false); //隱藏列表頭 tableWidget->horizontalHeader()->setVisible(false); //隱藏行表頭
十二、對(duì)表頭文字的字體、顏色進(jìn)行設(shè)置
QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //獲得水平方向表頭的Item對(duì)象
columnHeaderItem0->setFont(QFont("Helvetica")); //設(shè)置字體
columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //設(shè)置單元格背景顏色
columnHeaderItem0->setTextColor(QColor(200,111,30)); //設(shè)置文字顏色
十三、在單元格里加入控件:
QTableWidget不僅允許把文字加到單元格,還允許把控件也放到單元格中。比如,把一個(gè)下拉框加入單元格,可以這么做:
QComboBox *comBox = new QComboBox();
comBox->addItem("Y");
comBox->addItem("N");
tableWidget->setCellWidget(0,2,comBox);
十四、合并單元格
tableWidget->setSpan(0, 0, 3, 1) //其參數(shù)為: 要改變單元格的 1行數(shù) 2列數(shù) 要合并的 3行數(shù) 4列數(shù)
十五、獲取被單擊表格內(nèi)容
通過(guò)實(shí)現(xiàn) itemClicked (QTableWidgetItem *) 信號(hào)的槽函數(shù),就可以獲得鼠標(biāo)單擊到的單元格指針,進(jìn)而獲得其中的文字信息
connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int))); //將itemClicked信號(hào)與函數(shù)getItem綁定
QTableWidget和QTableView的區(qū)別:
QTableWidget是QTableView的子類。
主要的區(qū)別是QTableView可以使用自定義的數(shù)據(jù)模型來(lái)顯示內(nèi)容(也就是先要通過(guò)setModel來(lái)綁定數(shù)據(jù)源),而QTableWidget則只能使用標(biāo)準(zhǔn)的數(shù)據(jù)模型,并且其單元格數(shù)據(jù)是QTableWidgetItem的對(duì)象來(lái)實(shí)現(xiàn)的(也就是不需要數(shù)據(jù)源,將逐個(gè)單元格內(nèi)的信息填好即可)。
這主要體現(xiàn)在QTableView類中有setModel成員函數(shù),而到了QTableWidget類中,該成員函數(shù)變成了私有。
使用QTableWidget就離不開QTableWidgetItem。QTableWidgetItem用來(lái)表示表格中的一個(gè)單元格,正個(gè)表格都需要用逐個(gè)單元格構(gòu)建起來(lái)。
本文簡(jiǎn)單介紹了Qt表格控件QTableView簡(jiǎn)單使用方法及QTableView與QTableWidget區(qū)別,更多關(guān)于Qt表格控件QTableView使用技巧請(qǐng)查看下面的相關(guān)鏈接
- Qt實(shí)現(xiàn)導(dǎo)出QTableWidget/QTableView數(shù)據(jù)
- Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細(xì)使用方法與實(shí)例
- Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特定的行的詳細(xì)方法與實(shí)例
- python GUI庫(kù)圖形界面開發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例
- PyQt5 QTableView設(shè)置某一列不可編輯的方法
- PyQT5 QTableView顯示綁定數(shù)據(jù)的實(shí)例詳解
- PyQt6/PySide6中QTableView類的實(shí)現(xiàn)
相關(guān)文章
C++原地刪除有序數(shù)組重復(fù)項(xiàng)的N種方法
給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度,不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用O(1)額外空間的條件下完成,故本文介紹了C++原地刪除有序數(shù)組重復(fù)項(xiàng)的N種方法,需要的朋友可以參考下2025-03-03
C語(yǔ)言FlappyBird飛揚(yáng)的小鳥實(shí)現(xiàn)開發(fā)流程
因?yàn)樵诩艺撕枚嗵?,隨手玩了下自己以前做的一些小游戲,說(shuō)真的,有幾個(gè)游戲做的是真的劣質(zhì),譬如 flappybird 真的讓我難以忍受,于是重做了一波分享給大家2022-11-11
C語(yǔ)言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)
哈嘍各位友友們,今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!本文將手把手帶領(lǐng)大家探討利用試除法、篩選法求解素?cái)?shù)的n層境界!都是精華內(nèi)容,可不要錯(cuò)過(guò)喲2023-01-01
C語(yǔ)言實(shí)現(xiàn)會(huì)員管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)會(huì)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++ OpenCV實(shí)現(xiàn)抖音"藍(lán)線挑戰(zhàn)"特效
這篇文章主要介紹了如何使用OpenCV C++ 實(shí)現(xiàn)抖音上的特效“藍(lán)線挑戰(zhàn)”。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定的幫助,需要的可以參考一下2022-01-01
C++中std::invalid_argument報(bào)錯(cuò)解決
在C++編程中,std::invalid_argument是一個(gè)常見的異常,用于指示函數(shù)參數(shù)無(wú)效,文章詳細(xì)解析了這一異常的產(chǎn)生原因,并提供了多種解決策略,感興趣的可以了解一下2024-09-09
C++使用CriticalSection實(shí)現(xiàn)線程同步實(shí)例
這篇文章主要介紹了C++使用CriticalSection實(shí)現(xiàn)線程同步實(shí)例,是使用CriticalSection對(duì)前文實(shí)例的擴(kuò)展,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10
C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)100以內(nèi)所有素?cái)?shù)的個(gè)數(shù)
本文詳細(xì)講解了C語(yǔ)言實(shí)現(xiàn)統(tǒng)計(jì)100以內(nèi)所有素?cái)?shù)個(gè)數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。需要的朋友可以收藏下,方便下次瀏覽觀看2021-11-11

