QTableWidget的使用

使用QTableWidget,初始化數據、設置列頭及格式,設置行數,設置每個單元格的編輯,間隔行底色變換、行選擇 ,模式,單元格選擇模式、插入行 、追加行、刪除行,單元格加圖標,單元格顯示checkbox并設置是否可編輯,自動調節行高、列寬,顯示/隱藏? 水平表頭、垂直表頭

.h文件

#ifndef TABLEWIDGETEXAMPLE_H
#define TABLEWIDGETEXAMPLE_H#include <QMainWindow>
#include <QLabel>namespace Ui {
class TableWidgetExample;
}class TableWidgetExample : public QMainWindow
{Q_OBJECTprivate:enum CellType{ctName=1000,ctSex,ctBirth,ctNation,ctPartyM,ctScore};//單元格類型 枚舉enum FieldColNum{colName=0,colSex,colBirth,colNation,colScore,colPartyM};//列號QLabel *labCellIndex;QLabel *labCellType;QLabel *labStudID;void createItemsARow(int rowNo,QString name,QString sex,QDate birth,QString nation,bool isPM,int score);public:explicit TableWidgetExample(QWidget *parent = nullptr);~TableWidgetExample();private slots:void on_btnSetHeader_clicked();void on_btnSetRows_clicked();void on_btnIniData_clicked();void on_btnInsertRow_clicked();void on_btnAppendRow_clicked();void on_btnDelCurRow_clicked();void on_btnAutoHeight_clicked();void on_btnAutoWidth_clicked();void on_btnReadToEdit_clicked();void on_chkBoxTabEditable_clicked(bool checked);void on_chkBoxRowColor_clicked(bool checked);void on_chkBoxHeaderH_clicked(bool checked);void on_chkBoxHeaderV_clicked(bool checked);void on_rBtnSelectRow_clicked();void on_rBtnSelectItem_clicked();void on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);private:Ui::TableWidgetExample *ui;
};#endif // TABLEWIDGETEXAMPLE_H

.cpp

#include "tablewidgetexample.h"
#include "ui_tablewidgetexample.h"#include <QDate>
#include <QTableWidgetItem>
#include <QRandomGenerator>//給制定行號單元格 根據字段內容填充
void TableWidgetExample::createItemsARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPM, int score)
{uint studID = 202105000;//學號前綴//姓名QTableWidgetItem *item = new QTableWidgetItem(name,TableWidgetExample::ctName);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);studID+=rowNo;item->setData(Qt::UserRole,QVariant(studID));ui->tableInfo->setItem(rowNo,TableWidgetExample::colName,item);//性別//://images/boy.icoQIcon icon;if(sex=="男")icon.addFile("://images/boy.ico");elseicon.addFile("://images/girl.ico");item = new QTableWidgetItem(sex,TableWidgetExample::ctSex);item->setIcon(icon);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);Qt::ItemFlags flags =Qt::ItemIsSelectable|Qt::ItemIsEnabled;item->setFlags(flags);ui->tableInfo->setItem(rowNo,TableWidgetExample::colSex,item);//出生日期QString str = birth.toString("yyyy-MM-dd");item = new QTableWidgetItem(str,TableWidgetExample::ctBirth);item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colBirth,item);//民族item= new QTableWidgetItem(nation,TableWidgetExample::ctNation);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colNation,item);//是否黨員item = new QTableWidgetItem("黨員",TableWidgetExample::ctPartyM);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);flags =Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled;item->setFlags(flags);if(isPM)item->setCheckState(Qt::Checked);elseitem->setCheckState(Qt::Unchecked);item->setBackground(QBrush(Qt::yellow));//設置背景色ui->tableInfo->setItem(rowNo,TableWidgetExample::colPartyM,item);//分數str.setNum(score);item = new QTableWidgetItem(str,TableWidgetExample::ctScore);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableInfo->setItem(rowNo,TableWidgetExample::colScore,item);
}
TableWidgetExample::TableWidgetExample(QWidget *parent): QMainWindow(parent), ui(new Ui::TableWidgetExample)
{ui->setupUi(this);setCentralWidget(ui->mainSplitter);labCellIndex = new QLabel("當前單元格坐標",this);labCellIndex->setMinimumWidth(250);labCellType= new QLabel("當前單元格類型",this);labCellType->setMinimumWidth(200);labStudID= new QLabel("學生ID:",this);labStudID->setMinimumWidth(200);ui->statusbar->addWidget(labCellIndex);ui->statusbar->addWidget(labCellType);ui->statusbar->addWidget(labStudID);ui->tableInfo->setAlternatingRowColors(ui->chkBoxRowColor->isChecked());
}TableWidgetExample::~TableWidgetExample()
{delete ui;
}void TableWidgetExample::on_btnSetHeader_clicked()
{QStringList headerText;headerText<<"姓名"<<"性別"<<"出生日期"<<"民族"<<"分數"<<"是否黨員";ui->tableInfo->setColumnCount(headerText.size());for(int i=0;i<ui->tableInfo->columnCount();i++){QTableWidgetItem *headerItem = new QTableWidgetItem(headerText.at(i));QFont font = headerItem->font();font.setBold(true);font.setPointSize(11);headerItem->setForeground(QBrush(Qt::red));headerItem->setFont(font);ui->tableInfo->setHorizontalHeaderItem(i,headerItem);}
}void TableWidgetExample::on_btnSetRows_clicked()
{ui->tableInfo->setRowCount(ui->spinRowCount->value());ui->tableInfo->setAlternatingRowColors(ui->chkBoxRowColor->isChecked());
}void TableWidgetExample::on_btnIniData_clicked()
{QDate birth(2001,5,1);ui->tableInfo->clearContents();for(int i=0;i<ui->tableInfo->rowCount();i++){QString strName =QString("學生%1").arg(i);QString sex = ((i%2)==0)?"男":"女";bool isParty = ((i%2)==0)?false:true;int score =QRandomGenerator::global()->bounded(60,100);createItemsARow(i,strName,sex,birth,"漢族",isParty,score);int addDays =QRandomGenerator::global()->bounded(1,90);birth=birth.addDays(addDays);}
}void TableWidgetExample::on_btnInsertRow_clicked()
{int curRow = ui->tableInfo->currentRow();ui->tableInfo->insertRow(curRow);createItemsARow(curRow,"新學生","男",QDate::fromString("2022-10-1","yyyy-M-d"),"苗族",true,88);
}void TableWidgetExample::on_btnAppendRow_clicked()
{int curRow= ui->tableInfo->rowCount();//當前行號ui->tableInfo->insertRow(curRow);createItemsARow(curRow,"新生","女",QDate::fromString("2022-6-1","yyyy-M-d"),"滿族",true,98);
}void TableWidgetExample::on_btnDelCurRow_clicked()
{int curRow= ui->tableInfo->currentRow();//當前行號ui->tableInfo->removeRow(curRow);
}void TableWidgetExample::on_btnAutoHeight_clicked()
{ui->tableInfo->resizeRowsToContents();
}void TableWidgetExample::on_btnAutoWidth_clicked()
{ui->tableInfo->resizeColumnsToContents();
}void TableWidgetExample::on_btnReadToEdit_clicked()
{QTableWidgetItem *item;ui->textEdit->clear();for(int i=0;i<ui->tableInfo->rowCount();i++){QString str = QString::asprintf("Row %d:",i+1);for(int j=0;j<ui->tableInfo->columnCount()-1;j++){item= ui->tableInfo->item(i,j);str += QString("\t %1").arg(item->text());}item = ui->tableInfo->item(i,colPartyM);if(item->checkState()==Qt::Checked)str+=QString("\t %1").arg("黨員");elsestr+=QString("\t %1").arg("群眾");ui->textEdit->appendPlainText(str);}
}void TableWidgetExample::on_chkBoxTabEditable_clicked(bool checked)
{if(checked){ui->tableInfo->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);}else{ui->tableInfo->setEditTriggers(QAbstractItemView::NoEditTriggers);}
}void TableWidgetExample::on_chkBoxRowColor_clicked(bool checked)
{ui->tableInfo->setAlternatingRowColors(checked);
}void TableWidgetExample::on_chkBoxHeaderH_clicked(bool checked)
{ui->tableInfo->horizontalHeader()->setVisible(checked);
}void TableWidgetExample::on_chkBoxHeaderV_clicked(bool checked)
{ui->tableInfo->verticalHeader()->setVisible(checked);
}void TableWidgetExample::on_rBtnSelectRow_clicked()
{ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectRows);
}void TableWidgetExample::on_rBtnSelectItem_clicked()
{ui->tableInfo->setSelectionBehavior(QAbstractItemView::SelectItems);
}void TableWidgetExample::on_tableInfo_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{Q_UNUSED(previousRow);Q_UNUSED(previousColumn);QTableWidgetItem *item = ui->tableInfo->item(currentRow,currentColumn);if(item==nullptr)return;labCellIndex->setText(QString::asprintf("當前單元格坐標 %d 行 %d 列",currentRow,currentColumn));labCellType->setText(QString::asprintf("獲取單元格的類型 %d",item->type()));labStudID->setText(QString::asprintf("學生ID:%d",item->data(Qt::UserRole).toUInt()));
}

效果

?

?

總結

1. 容易敲錯?ItemIsEnabled

2. 因為win11的原因,在默認樣式下,效果不顯示 設置成了Fusion ,表格的間隔行顏色變換才生效;后續繼續看下 樣式

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

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

相關文章

Android Gradle開發與應用

Android Gradle 開發是指在 Android 應用開發中使用 Gradle 作為構建工具的過程。Gradle 是一個基于 Groovy 的自動化構建工具&#xff0c;它允許開發者定義靈活的構建邏輯&#xff0c;并且能夠很好地與 Android Studio 集成。以下是一些關于 Android Gradle 開發與應用的基本概…

替換特殊符號

content content.replaceAll("[\\x00-\\x09\\x11\\x12\\x14-\\x1F\\x7F]", ""); 打印特殊符號&#xff1a; String s new String( Character.toChars(0)); System.out.println((char)0); 2024-06-20 17:21:26.155 ERROR 5584 --- [6884333_inbound] c.…

好記性不如爛筆頭(三)——文件保存后打開呈現亂碼問題

現象 請隨博主進行下列操作&#xff0c;神奇的事情會發生—— 1、新建記事本&#xff0c;里面輸入“同”字&#xff0c;保存為ANSI格式 2、再次打開會發現&#xff0c;“同”已經變成了亂碼 3、類似的字還有很多&#xff0c;例如“同學”的“學”。而有些字則不會出現這種情況…

3_電機的發展及學習方法

一、電機組成及發展 1、什么是勵磁&#xff1f; 在電磁學中&#xff0c;勵磁是通過電流產生磁場的過程。 發電機或電動機由在磁場中旋轉的轉子組成。磁場可以由 永磁體或勵磁線圈產生。對于帶有勵磁線圈的機器&#xff0c;電流必須在線圈中流動才能產生&#xff08;激發&#x…

香港服務器托管對外貿行業必要性和優勢

在當今全球化的經濟環境下&#xff0c;外貿企業面臨著前所未有的機遇與挑戰。其中&#xff0c;服務器托管的選擇對于外貿企業的運營效率和市場拓展具有舉足輕重的作用。香港服務器&#xff0c;憑借其獨特的地理位置、優質的網絡環境和卓越的服務性能&#xff0c;一直是外貿企業…

“Hello, World” 的歷史

“Hello, World!” —— 初學者進入編程世界的第一步 由布萊恩柯林漢 撰寫的“Hello, world”程序 (1978年) 布萊恩W.克尼漢&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 語言背后的巨人 布萊恩W.克尼漢 布萊恩W.克尼漢在 1942 年出生在加拿大多倫多&#xff…

OS中斷機制-嵌套和競爭

對于FreeRTOS最好不去用中斷嵌套,中斷嵌套會增加堆棧空間的使用,因為每個中斷服務程序都需要保存和恢復寄存器狀態,這可能會耗盡有限的堆棧空間,從而導致系統故障。以及中斷嵌套時,不同的中斷服務程序可能會競爭訪問共享資源,從而增加死鎖的風險。這可能會導致系統出現故…

Verilog進行結構描述(structural modeling)(一):基本概念

目錄 1.結構描述(structural modeling)的內容&#xff1a;2.實例 微信公眾號獲取更多FPGA相關源碼&#xff1a; 1.結構描述(structural modeling)的內容&#xff1a; 用門來描述器件的功能基于基本元件和底層模塊例化語句最接近實際的硬件結構主要使用元件的定義、使用聲明以…

Flink——最流批的大數據框架(流批一體)

Apache Flink基礎教程 資料來源&#xff1a;Apache Flink Tutorial (tutorialspoint.com) Apache Flink是Apache Hadoop的開源本地分析數據庫。它由Cloudera、MapR、Oracle和Amazon等供應商提供。本教程中提供的示例是使用Cloudera Apache Flink開發的。 本教程是為那些想要學…

fork 是一個創建新進程的系統調用

在計算機科學中&#xff0c;fork 是一個創建新進程的系統調用。具體來說&#xff0c;fork 調用會創建一個與當前進程幾乎完全相同的副本&#xff0c;包括父進程的內存布局、環境變量、打開的文件描述符等。這個新的進程被稱為子進程&#xff0c;而原始進程被稱為父進程。 以下…

光伏開發有沒有難點?如何解決?

隨著全球對可再生能源的日益重視&#xff0c;光伏技術作為其中的佼佼者&#xff0c;已成為實現能源轉型的關鍵手段。然而&#xff0c;光伏開發并非一帆風順&#xff0c;其過程中也面臨著諸多難點和挑戰。本文將對這些難點進行探討&#xff0c;并提出相應的解決策略。 一、光伏開…

12 學習總結:操作符

目錄 一、操作符的分類 二、二進制和進制轉換 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;二進制 &#xff08;三&#xff09;進制轉換 1、2進制與10進制的互換 &#xff08;1&#xff09;2進制轉化10進制 &#xff08;2&#xff09;10進制轉化2進制 2…

解決vs2022scanf報錯問題

vs2022scanf報錯問題 大家下完vs2022之后,開心的寫下一段簡單的代碼: #include <stdio.h> #include <stdlib.h>int main() {int a;scanf("%d", &a);printf("%d", a);return 0; } vs2022會毫不猶豫的報錯,下面是報錯信息: 翻譯過來就是v…

探究InnoDB Compact行格式背后

目錄 一、InnoDB 行格式數據準備 二、COMPACT行格式整體說明 三、記錄的額外信息 &#xff08;一&#xff09;變長字段長度列表 數據結構 存儲過程 讀取過程 變長字段長度列表存儲示例 &#xff08;二&#xff09;NULL 值位圖 數據結構 存儲過程 讀取過程 NULL 值…

【MySQL進階之路 | 高級篇】索引的聲明與使用

1. 索引的分類 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;單列索引和空間索引. 從功能邏輯上說&#xff0c;索引主要分為普通索引&#xff0c;唯一索引&#xff0c;主鍵索引和全文索引.按物理實現方式&#xff0c;索引可以分為聚簇索引…

蘋果電腦清理垃圾怎么清理 macbook怎么清理電腦垃圾文件 macos優化軟件 cleanmymac怎么使用

在選擇電腦時&#xff0c;不少人都會選擇擁有高性能和輕薄機身的mac。一開始&#xff0c;它確實如我們所期待的那樣健步如飛&#xff0c;然而&#xff0c;隨著時間的流逝&#xff0c;有沒有覺得您的Mac有時候像是需要一個好的春季大掃除一樣&#xff1f;隨著我們不斷使用電腦&a…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

1590. 【中山市第十二屆義務教育段學生信息學邀請賽】除法運算(divide)

時間限制: 1 s 空間限制: 256 MB 題目描述 Jimmy 開始學習除法啦&#xff01;一開始他學習了余數為 0 的除法&#xff08;也就是我們常說的整除&#xff09;&#xff0c;后來又學習了余數不為 0 的除法&#xff0c;所以 Jimmy 對被除數、除數、商、余數這些概念都已經了如指…

C語言學習步驟

C語言學習步驟 學習C語言是一個系統化的過程&#xff0c;以下是一些基本的步驟和建議&#xff1a; 1. 理解基礎概念&#xff1a;首先&#xff0c;了解編程的基本概念&#xff0c;比如變量常量、數據類型、指針、控制結構&#xff08;順序語句、分支語句、循環語句&#xff09;、…

神經網絡參數-----學習率(Learning Rate)

學習率 學習率是訓練神經網絡的重要超參數之一&#xff0c;它代表在每一次迭代中梯度向損失函數最優解移動的步長。它的大小決定網絡學習速度的快慢。在網絡訓練過程中&#xff0c;模型通過樣本數據給出預測值&#xff0c;計算代價函數并通過反向傳播來調整參數。重復上述過程…