QT6 源(147)模型視圖架構里的表格窗體 QTableWidget 的范例代碼舉例,以及其條目 QTableWidgetItem 類型的源代碼。

(1)先用一個簡單的例子,學習一下本類里的成員函數的使用。生成如下圖的界面,表格窗體與初始數據:

在這里插入圖片描述

++查看其 ui_widget . h 文件 ,里面的將是最標準的表格窗體的使用代碼 :

#ifndef UI_WIDGET_H
#define UI_WIDGET_H#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget
{
public:QVBoxLayout  * verticalLayout;//主窗體上一個按鈕,一個表格窗體。QPushButton  * pushButton ;QTableWidget * tableWidget;void setupUi(QWidget * Widget){if (Widget->objectName().isEmpty())Widget->setObjectName(QString::fromUtf8("Widget"));Widget->resize(136, 120);QFont font;font.setPointSize(14);Widget->setFont(font);       //這一段是設置主窗體,并給予垂直布局Widget->setContextMenuPolicy(Qt::CustomContextMenu);verticalLayout = new QVBoxLayout(Widget);verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));pushButton = new QPushButton(Widget);   //生成按鈕組件pushButton->setObjectName(QString::fromUtf8("pushButton"));verticalLayout->addWidget(pushButton);tableWidget = new QTableWidget(Widget); //生成表格窗體if (tableWidget->columnCount() < 3)     //至少三列么?tableWidget->setColumnCount(3);//為表格窗體里的組件起名,起的名字怪怪的,避免重復,倆下劃線已經很奇特安全了。QTableWidgetItem * __qtablewidgetitem = new QTableWidgetItem();tableWidget->setHorizontalHeaderItem(0, __qtablewidgetitem);QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();tableWidget->setHorizontalHeaderItem(1, __qtablewidgetitem1);QTableWidgetItem *__qtablewidgetitem2 = new QTableWidgetItem();tableWidget->setHorizontalHeaderItem(2, __qtablewidgetitem2); //生成水平表頭if (tableWidget->rowCount() < 2) //生成兩行tableWidget->setRowCount(2);QTableWidgetItem *__qtablewidgetitem3 = new QTableWidgetItem();tableWidget->setVerticalHeaderItem(0, __qtablewidgetitem3);   QTableWidgetItem *__qtablewidgetitem4 = new QTableWidgetItem();tableWidget->setVerticalHeaderItem(1, __qtablewidgetitem4);   //生成垂直表頭QTableWidgetItem *__qtablewidgetitem5 = new QTableWidgetItem();tableWidget->setItem(0, 0, __qtablewidgetitem5);  //依次生成表里的每個元素[0,0]QTableWidgetItem *__qtablewidgetitem6 = new QTableWidgetItem();tableWidget->setItem(0, 1, __qtablewidgetitem6);  //[0,1]QTableWidgetItem *__qtablewidgetitem7 = new QTableWidgetItem();tableWidget->setItem(0, 2, __qtablewidgetitem7);  //[0,2]QTableWidgetItem *__qtablewidgetitem8 = new QTableWidgetItem();tableWidget->setItem(1, 0, __qtablewidgetitem8);  //[1,0]QTableWidgetItem *__qtablewidgetitem9 = new QTableWidgetItem();tableWidget->setItem(1, 1, __qtablewidgetitem9);  //[1,1]QTableWidgetItem *__qtablewidgetitem10 = new QTableWidgetItem();tableWidget->setItem(1, 2, __qtablewidgetitem10); //[1,2]tableWidget->setObjectName(QString::fromUtf8("tableWidget"));tableWidget->horizontalHeader()->setVisible(true);//使水平表頭可見。tableWidget->horizontalHeader()->setDefaultSectionSize(31);verticalLayout->addWidget(tableWidget); //把表格窗體加入到主窗體地的布局中。retranslateUi(Widget);QMetaObject::connectSlotsByName(Widget);//允許通過函數名綁定信號與槽函數。} // setupUivoid retranslateUi(QWidget * Widget){   //設置程序的標題Widget->setWindowTitle(QCoreApplication::translate("Widget", "H", nullptr));pushButton->setText(QCoreApplication::translate("Widget", "pushButton", nullptr));//以下依次賦予行表頭與列表頭要顯示的文本: cA cB cC rA rBQTableWidgetItem *___qtablewidgetitem = tableWidget->horizontalHeaderItem(0);___qtablewidgetitem->setText(QCoreApplication::translate("Widget", "cA", nullptr));QTableWidgetItem *___qtablewidgetitem1 = tableWidget->horizontalHeaderItem(1);___qtablewidgetitem1->setText(QCoreApplication::translate("Widget", "cB", nullptr));QTableWidgetItem *___qtablewidgetitem2 = tableWidget->horizontalHeaderItem(2);___qtablewidgetitem2->setText(QCoreApplication::translate("Widget", "cC", nullptr));QTableWidgetItem *___qtablewidgetitem3 = tableWidget->verticalHeaderItem(0);___qtablewidgetitem3->setText(QCoreApplication::translate("Widget", "rA", nullptr));QTableWidgetItem *___qtablewidgetitem4 = tableWidget->verticalHeaderItem(1);___qtablewidgetitem4->setText(QCoreApplication::translate("Widget", "rB", nullptr));const bool __sortingEnabled = tableWidget->isSortingEnabled();tableWidget->setSortingEnabled(false); //給表格中條目賦值時候不允許排序QTableWidgetItem *___qtablewidgetitem5 = tableWidget->item(0, 0);___qtablewidgetitem5->setText(QCoreApplication::translate("Widget", "0", nullptr));QTableWidgetItem *___qtablewidgetitem6 = tableWidget->item(0, 1);___qtablewidgetitem6->setText(QCoreApplication::translate("Widget", "1", nullptr));QTableWidgetItem *___qtablewidgetitem7 = tableWidget->item(0, 2);___qtablewidgetitem7->setText(QCoreApplication::translate("Widget", "2", nullptr));QTableWidgetItem *___qtablewidgetitem8 = tableWidget->item(1, 0);___qtablewidgetitem8->setText(QCoreApplication::translate("Widget", "3", nullptr));QTableWidgetItem *___qtablewidgetitem9 = tableWidget->item(1, 1);___qtablewidgetitem9->setText(QCoreApplication::translate("Widget", "4", nullptr));QTableWidgetItem *___qtablewidgetitem10 = tableWidget->item(1, 2);___qtablewidgetitem10->setText(QCoreApplication::translate("Widget", "5", nullptr));tableWidget->setSortingEnabled(__sortingEnabled);//最后恢復表格中的排序設置。} // retranslateUi};namespace Ui {class Widget: public Ui_Widget {};
} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H

(2)以下是 表格里的條目 QTableWidgetItem 類型的源代碼,定義于頭文件 qtablewidget . h無論是什么樣的模型與視圖里的條目,都是為了存儲數據,定義上都大同小異,故不再詳細注釋了

/*
The QTableWidgetItem class provides an item for use with the QTableWidget class.Detailed Description :
表格項用于存儲表格小部件的信息。項目通常包含文本、圖標或復選框。
QTableWidgetltem類是一個方便的類,它在Qt 3中替換了QTableWidgetltem類。
它提供了一個可以與QTableWidgetltem類一起使用的項目。
頂級項目在沒有父項的情況下構建,然后根據行號和列號指定的位置插入:QTableWidgetItem * newItem = new QTableWidgetItem(tr("%1").arg(pow(row, column+1)));tableWidget->setItem(row, column, newItem);每個項目都可以有自己的背景畫筆,這通過`setBackground()、函數來設置。
當前的背景畫筆可以通過background ()、函數來獲取。
每個項目的文本標簽可以使用其特定的字體和畫筆來呈現,這通過`setFont ()'和setForeground)函數進行指定,
并通過`font()`和`foreground()'函數來讀取。默認情況下,項是啟用的,可編輯的,可選擇的,可檢查的,并且既可以作為拖放操作的源,也可以作為落點目標。
每個項的標記可以通過調用setFlags()函數并傳入相應的值(見Qt:ItemFlags)來更改。
可檢查的項可以通過setCheckState()函數進行檢查和取消檢查。
對應的checkState()函數則指示該項當前是否被檢查過。Subclassing :
當子類化 QTableWidgetltem 以提供自定義項時,可以為它們定義新類型,以便它們可以與標準項區分開來.
需要此功能的子類的構造函數需要使用等于或大于 UserType 的新類型值調用基類構造函數。*/#ifndef QT_NO_DATASTREAM  //說明本條目可以讀寫入數據流里進行調試。
Q_WIDGETS_EXPORT QDataStream & operator>>(QDataStream & in , QTableWidgetItem       & item);
Q_WIDGETS_EXPORT QDataStream & operator<<(QDataStream & out, const QTableWidgetItem & item);
#endifclass Q_WIDGETS_EXPORT QTableWidgetItem
{friend class QTableWidget;friend class QTableModel;
private:QTableModel * tableModel() const;private: //可見,表格里的條目還有豐富的數據成員,以描述條目里的數據與屬性int                       rtti     ;QList<QWidgetItemData>    values   ; //包含了條目里的數據QTableWidget            * view     ; //本條目屬于哪個表格窗體。QTableWidgetItemPrivate * d        ;Qt::ItemFlags             itemFlags; //本條目的編輯屬性。public:enum ItemType { Type = 0, UserType = 1000 };//Constructs a table item of the specified type that does not belong to any table.//形參 type會賦值給本類的私有數據成員 rtti,以保存本條目的類型。explicit   QTableWidgetItem(int type = Type); //默認類型是 0inline int type() const { return rtti; }//Returns the type passed to the QTableWidgetItem constructor.//Constructs a table item with the given text.explicit   QTableWidgetItem(const QString & text, int type = Type); //有參構造函數explicit   QTableWidgetItem(const QIcon   & icon,const QString & text, int type = Type);QTableWidgetItem(const QTableWidgetItem & other); //copy構造函數QTableWidgetItem & operator=(const QTableWidgetItem & other);//copy賦值運算符函數virtual ~QTableWidgetItem(); //析構函數virtual bool operator< (const QTableWidgetItem & other) const; //無注釋virtual QTableWidgetItem * clone() const; //Creates a copy of the item.//Returns the table widget that contains the item.inline  QTableWidget     * tableWidget() const { return view; }inline int row   () const;inline int column() const;//Returns the row of the item in the table.//If the item is not in a table, this function will return -1.virtual void read (QDataStream & in )      ; //Reads  the item from stream in .virtual void write(QDataStream & out) const; //Writes the item to   stream out.//Returns true if the item is selected, otherwise returns false.bool  isSelected() const;void setSelected(bool select); //Sets the selected state of the item to select./*enum Qt::ItemFlag {NoItemFlags = 0,ItemIsSelectable = 1,ItemIsEditable = 2,ItemIsDragEnabled = 4,ItemIsDropEnabled = 8,ItemIsUserCheckable = 16,ItemIsEnabled = 32,ItemIsAutoTristate = 64,ItemNeverHasChildren = 128,ItemIsUserTristate = 256};Q_DECLARE_FLAGS(ItemFlags, ItemFlag)Q_DECLARE_OPERATORS_FOR_FLAGS(ItemFlags)*/inlineQt::ItemFlags        flags() const { return itemFlags; } //返回條目具有的屬性void              setFlags(Qt::ItemFlags flags);virtual QVariant     data(int role) const;               //讀寫條目里具有的數據。virtual void      setData(int role, const QVariant &value);//以下依次是讀寫條目里各角色對應的數據。inline QString       text() const         //角色 0{   return data(Qt::DisplayRole).toString(); }inline void       setText(const QString & text){   setData(Qt::DisplayRole, text); }inline QIcon         icon() const         //角色 1{   return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }inline void       setIcon(const QIcon & icon){   setData(Qt::DecorationRole, icon); }inline QString       toolTip() const      //角色 3{ return data(Qt::ToolTipRole).toString(); }inline void       setToolTip(const QString & toolTip){ setData(Qt::ToolTipRole, toolTip); }inline QString       statusTip() const    //角色 4{   return data(Qt::StatusTipRole).toString(); }inline void       setStatusTip(const QString &statusTip){   setData(Qt::StatusTipRole, statusTip); }inline QString       whatsThis() const    //角色 5{   return data(Qt::WhatsThisRole).toString(); }inline void       setWhatsThis(const QString & whatsThis){   setData(Qt::WhatsThisRole, whatsThis); }inline QFont         font() const         //角色 6{   return qvariant_cast<QFont>(data(Qt::FontRole)); }inline void       setFont(const QFont & font){   setData(Qt::FontRole, font); }inline int           textAlignment() const//角色 7{   return data(Qt::TextAlignmentRole).toInt(); }inline void       setTextAlignment(int alignment){   setData(Qt::TextAlignmentRole, alignment); }inline QBrush        background() const   //角色 8{   return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }inline void       setBackground(const QBrush & brush){   setData(Qt::BackgroundRole,brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }//QBrush(Qt::GlobalColor color, Qt::BrushStyle bs = Qt::SolidPattern);inline QBrush        foreground() const   //角色 9{   return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }inline void       setForeground(const QBrush &brush){   setData(Qt::ForegroundRole,brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }inline  //enum Qt::CheckState { Unchecked, PartiallyChecked, Checked };Qt::CheckState       checkState() const   //角色 10{   return static_cast<Qt::CheckState>(data(Qt::CheckStateRole).toInt()); }inlinevoid              setCheckState(Qt::CheckState state){   setData(Qt::CheckStateRole, state); }inline QSize         sizeHint() const     //角色 13{   return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }inline void       setSizeHint(const QSize & size){   setData(Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }}; //完結 class QTableWidgetItem

(3)

在這里插入圖片描述

(4)

謝謝

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

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

相關文章

URL時間戳參數深度解析:緩存破壞與前端優化的前世今生

&#x1f50d; URL時間戳參數深度解析&#xff1a;緩存破壞與前端優化的前世今生 在日常的Web開發中&#xff0c;你是否注意到很多接口URL后面都會帶有一個時間戳參數&#xff1f;比如 xxx/getMsg?_1751413509056。這個看似簡單的參數背后&#xff0c;卻隱藏著前端緩存策略、性…

分布式鎖實現方式:基于Redis的分布式鎖實現(Spring Boot + Redis)

Redis實現分布式鎖的原理 Redis分布式鎖基于其單線程執行命令的特性&#xff0c;通過原子操作實現多節點間的互斥訪問。下面從原理、實現、問題及優化四個方面詳細解析&#xff1a; 1.原子性與互斥性 Redis分布式鎖的核心是原子性操作&#xff1a; 獲取鎖&#xff1a;使用SE…

linux升級降級內核實驗

?實驗環境 vmware workstation 17 centos7.9 下載鏈接&#xff1a; https://vault.centos.org/7.9.2009/isos/x86_64/ ubuntu24.04 下載鏈接&#xff1a; https://old-releases.ubuntu.com/releases/24.04/ ?實驗目的 為了解決日常環境部署中某些驅動軟件依賴特定內…

華為云開始了“開發者空間 AI Agent 開發”活動

引言 今天在華為云App上偶然看到一個新活動&#xff1a;Developer Events_Developer Alliance-Huawei Cloud。這個活動要求開發者可結合自己的工作實踐&#xff0c;須在華為開發者空間內完成應用構建&#xff0c;應用構建類型和主題為AI Agent應用開發。 AI Agent平臺 華為開…

2025.6.26總結

今天和我做同一業務得同事進行了工作交接&#xff0c;主要給我講了怎么去執行自動化。包括性能自動化&#xff0c;API自動化&#xff0c;UI自動化&#xff0c;除了UI自動化要寫些代碼&#xff0c;其他跑得話也就在工具上配個參數&#xff0c;就是個搬磚得活&#xff0c;沒太大技…

ip網絡基礎

交換機工作原理&#xff1a; 自主學習mac地址并成mac地址表 根據mac地址表再進行單播、廣播轉發 主機通信原理&#xff08;局域網&#xff09;&#xff1a; 需要了解arp協議 拓撲圖&#xff1a; 首先&#xff0c;我們觀察icmp數據包&#xff0c;發現缺少目標mac地址&#…

AI大模型如何重塑軟件開發流程?

文章目錄 每日一句正能量前言一、AI大模型的定義與特點&#xff08;一&#xff09;定義&#xff08;二&#xff09;特點 二、AI大模型在軟件開發中的應用場景&#xff08;一&#xff09;代碼自動生成&#xff08;二&#xff09;智能測試&#xff08;三&#xff09;需求分析與設…

Kafka與RabbitMQ相比有什么優勢?

大家好&#xff0c;我是鋒哥。今天分享關于【Kafka與RabbitMQ相比有什么優勢&#xff1f;】面試題。希望對大家有幫助&#xff1b; Kafka與RabbitMQ相比有什么優勢&#xff1f; 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; Kafka與RabbitMQ在消息隊列的設計和應…

LeetCode 2090. 半徑為 k 的子數組平均值

題目鏈接 2090. 半徑為 k 的子數組平均值 題目描述 給定一個下標從 0 開始的整數數組 nums 和整數 k&#xff0c;構建并返回一個長度為 n 的數組 avgs&#xff0c;其中 avgs[i] 表示以下標 i 為中心、半徑為 k 的子數組的平均值。具體規則如下&#xff1a; 無效位置&#x…

深入理解C++11原子操作:從內存模型到無鎖編程

文章目錄 C并發編程的新紀元內存模型基礎&#xff1a;可見性與有序性數據競爭的根源happens-before關系memory_order枚舉詳解1. memory_order_relaxed2. memory_order_acquire/memory_order_release3. memory_order_seq_cst 原子操作詳解std::atomic模板核心原子操作1. 讀取與存…

DQL-1-基礎查詢

基礎查詢 DQL-1-基礎查詢 基礎查詢DQL - 介紹DQL - 語法DQL - 基本查詢案例 DQL - 介紹 SQL 英文全稱是 Data Query Language, 數據查詢語言, 用來查詢數據庫中表的記錄 查詢關鍵字: SELECT DQL - 語法 SELECT 字段列表FROM 表名列表WHERE條件列表GROUP BY分組字段列表HAVI…

Prompt 精通之路(七)- 你的終極 AI 寶典:Prompt 精通之路系列匯總

你的終極 AI 寶典&#xff1a;Prompt 精通之路系列匯總 標簽&#xff1a; #Prompt指南 #AI學習資源 #速查手冊 #ChatGPT #系列總結 &#x1f680; Prompt 精通之路&#xff1a;系列文章導航 第一篇&#xff1a;AI 時代的新語言&#xff1a;到底什么是 Prompt&#xff1f;為什么…

P27:RNN實現阿爾茨海默病診斷

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、過程解讀 PyTorch 實戰&#xff1a;阿爾茨海默病數據預測模型 今天&#xff0c;我將帶大家一起探索一個基于 PyTorch 的深度學習小項目——利用 RNN 模…

HakcMyVM-Arroutada

信息搜集 主機發現 ┌──(kali?kali)-[~] └─$ nmap -sn 192.168.21.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-01 07:13 EDT Nmap scan report for 192.168.21.11 Host is up (0.00062s latency). MAC Address: 08:00:27:4E:CC:FB (PCS Systemtechnik/Or…

TEXT Submitting Solutions

前言 USACO 訓練項目配備了一個自動評分系統&#xff0c;用于批改你的作業題目。你可以直接在題目頁面提交你的程序&#xff1b;系統會對程序進行編譯和評分&#xff0c;幾秒鐘內就能將結果反饋給你。 支持的語言有 C、C&#xff08;含 C11 和 C14&#xff09;、PASCAL、Pyth…

Reactor 瞬態錯誤

在響應式編程中&#xff0c;retryWhen 操作符通過 RetrySignal 接口提供了對重試行為的精細控制&#xff0c;特別是在處理 瞬態錯誤&#xff08;transient errors&#xff09; 時。瞬態錯誤是指那些在一段時間內發生&#xff0c;但隨后會自行恢復的錯誤&#xff0c;例如網絡請求…

基于 SpringBoot+Vue.js+ElementUI 的小型超市商品管理系統設計與實現7000字論文設計

摘要 本論文設計并實現了一個基于 SpringBoot、Vue.js 和 ElementUI 的小型超市商品管理系統。該系統旨在為小型超市提供一個高效、便捷的商品管理解決方案&#xff0c;實現商品信息的錄入、查詢、修改、刪除等功能&#xff0c;同時支持庫存管理、銷售統計等業務需求。論文首先…

Kerberos 認證協議解析

文章目錄 概述核心概念認證流程階段一&#xff1a;Client -> AS&#xff0c;獲取 TGT階段二&#xff1a;Client -> TGS&#xff0c;獲取服務票據階段三&#xff1a;Client -> Server&#xff0c;請求服務 核心安全機制優缺點分析優勢局限性 實踐與排錯關鍵配置 (krb5.…

【設計模式07】適配器

前言 實現目標&#xff0c;組合源&#xff0c;寫個適配方法&#xff0c;適用于沒辦法改變源&#xff0c;但又想實現目標類。我暫時還沒使用到過&#xff0c;但感覺用處還是蠻大的 UML類圖 代碼示例 package com.sw.learn.pattern.C_structre.a_adapter;public class Main {//…

SPI、I2C和UART三種串行通信協議的--------簡單總結

目錄 一、3種協議的對比二、典型應用場景三、選型建議 以下是SPI、I2C和UART三種串行通信協議的對比分析及適用場景總結&#xff1a; 一、3種協議的對比 . 對比其他接口 特性ICSPIUART信號線數量2&#xff08;SCL SDA&#xff09;4&#xff08;SCK MOSI MISO SS/CS&…