Qt開發:項目視圖(Item Views)的介紹和使用

文章目錄

    • 一、清單視圖(List View)
      • 1.1 基本概念
      • 1.2 使用示例(文字列表)
      • 1.3 圖標+文字(圖標模式)
      • 1.4 常用設置
      • 1.5 完整示例
    • 二、樹視圖(Tree View)
      • 2.1 基本概念
      • 2.2 常用類簡介
      • 2.3 快速使用示例
      • 2.4 常用功能配置
    • 三、表視圖(Table View)
      • 3.1 基本概念
      • 3.2 常用類
      • 3.3 快速使用示例
      • 3.4 常用功能設置
    • 四、列視圖(Column View)
      • 4.1 基本概念
      • 4.2 常用類
      • 4.3 使用示例
      • 4.4 使用自定義樹結構數據
      • 4.5 常用方法
      • 4.6 與 QTreeView 的區別
    • 五、撤銷命令視圖(Undo View)
      • 5.1 基本概念
      • 5.2 使用示例

一、清單視圖(List View)

1.1 基本概念

??在 Qt 中,QListView 是用于顯示垂直列表或圖標網格的視圖控件,它是基于 Qt 的模型/視圖架構構建的,適合用于展示一組條目,如文件列表、聯系人列表、圖標等。

  • QListView 是視圖(View)
  • 搭配模型(Model)使用,例如 QStringListModel、QStandardItemModel
  • 也可以設置委托(Delegate)來自定義每一項的顯示方式

1.2 使用示例(文字列表)

#include <QListView>
#include <QStringListModel>// 創建模型
QStringList list = {"蘋果", "香蕉", "橘子"};
QStringListModel *model = new QStringListModel(list);// 創建視圖
QListView *listView = new QListView(this);
listView->setModel(model);

1.3 圖標+文字(圖標模式)

QStandardItemModel *model = new QStandardItemModel(this);QStandardItem *item1 = new QStandardItem(QIcon(":/img/apple.png"), "蘋果");
QStandardItem *item2 = new QStandardItem(QIcon(":/img/banana.png"), "香蕉");model->appendRow(item1);
model->appendRow(item2);QListView *listView = new QListView(this);
listView->setModel(model);// 設置為圖標模式
listView->setViewMode(QListView::IconMode);
listView->setIconSize(QSize(64, 64));
listView->setSpacing(10);

1.4 常用設置

在這里插入圖片描述

1.5 完整示例

#include <QWidget>
#include <QListView>
#include <QStringListModel>
#include <QMessageBox>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(450, 250);this->setWindowTitle("QListView 示例");QListView *pListView = new QListView(this);pListView->setGeometry(20, 20, 300, 160);QStringList list;list.append("運動類:籃球、足球");list.append("娛樂類:看電影、寫小說、聽音樂");list.append("游戲類:五子棋、撲克牌、中國象棋");list.append("旅游類:國外旅游、國內旅游");QStringListModel *listMode = new QStringListModel(list);pListView->setModel(listMode);connect(pListView, &QListView::clicked, this, &MainWindow::onSlotClickedFunc);}private slots:void onSlotClickedFunc(const QModelIndex &index) {QMessageBox::information(NULL, "興趣愛好", "你選擇的類型為:\n" + index.data().toString());}
};
#endif // MAINWINDOW_H

輸出結果:
請添加圖片描述

二、樹視圖(Tree View)

2.1 基本概念

??Qt 的樹視圖使用 QTreeView 類來實現,通常需要結合一個數據模型(如 QStandardItemModel 或自定義的 QAbstractItemModel)來提供數據源。

主要特點:

  • 支持多級嵌套(每一項都可以有子項)
  • 支持展開、折疊
  • 支持選擇、編輯、右鍵菜單等交互

2.2 常用類簡介

在這里插入圖片描述

2.3 快速使用示例

以下是一個最基本的樹視圖示例,使用 QStandardItemModel:

#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTreeView treeView;QStandardItemModel model;model.setHorizontalHeaderLabels({ "名稱" });// 創建頂層節點QStandardItem *rootItem = new QStandardItem("動物");// 添加子節點QStandardItem *mammalItem = new QStandardItem("哺乳動物");QStandardItem *birdItem = new QStandardItem("鳥類");rootItem->appendRow(mammalItem);rootItem->appendRow(birdItem);// 添加孫子節點mammalItem->appendRow(new QStandardItem("老虎"));mammalItem->appendRow(new QStandardItem("大象"));birdItem->appendRow(new QStandardItem("麻雀"));birdItem->appendRow(new QStandardItem("烏鴉"));// 添加到模型model.appendRow(rootItem);treeView.setModel(&model);treeView.expandAll();  // 默認展開所有節點treeView.setWindowTitle("樹視圖示例");treeView.resize(400, 300);treeView.show();return app.exec();
}

輸出結果:
在這里插入圖片描述

2.4 常用功能配置

在這里插入圖片描述

三、表視圖(Table View)

3.1 基本概念

??在 Qt 中,表視圖(QTableView)是用于顯示二維表格數據的控件,廣泛用于數據管理、數據庫展示、信息表格等場景。它是 Qt 的 Model/View 架構中的一部分,需要配合數據模型(如 QStandardItemModel 或自定義的 QAbstractTableModel)一起使用。

3.2 常用類

在這里插入圖片描述

3.3 快速使用示例

使用 QTableView + QStandardItemModel 創建一個簡單表格:

#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QStandardItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTableView tableView;QStandardItemModel model;// 設置行列數和表頭model.setRowCount(3);model.setColumnCount(3);model.setHorizontalHeaderLabels({ "姓名", "年齡", "城市" });// 設置數據model.setItem(0, 0, new QStandardItem("張三"));model.setItem(0, 1, new QStandardItem("25"));model.setItem(0, 2, new QStandardItem("北京"));model.setItem(1, 0, new QStandardItem("李四"));model.setItem(1, 1, new QStandardItem("30"));model.setItem(1, 2, new QStandardItem("上海"));model.setItem(2, 0, new QStandardItem("王五"));model.setItem(2, 1, new QStandardItem("28"));model.setItem(2, 2, new QStandardItem("廣州"));tableView.setModel(&model);tableView.setWindowTitle("表格視圖示例");tableView.resize(400, 250);tableView.show();return app.exec();
}

輸出結果:
在這里插入圖片描述

3.4 常用功能設置

在這里插入圖片描述

四、列視圖(Column View)

4.1 基本概念

??在 Qt 中,列視圖(QColumnView)是一個專門用于瀏覽分層結構數據(如文件系統)的控件,它以多列級聯展開的形式展示每一級子項。它是 Qt 的 Model/View 架構中的一部分,常見于例如 Mac OS Finder 樣式的界面中,每一級目錄(或層級)占據一個獨立的列,用戶點擊某一項時,其子項會在右側新列中顯示。

基本特點:

  • 展示層級結構數據(必須是樹形結構模型,如 QDirModel、QStandardItemModel 或 QFileSystemModel)。
  • 每一級展開為一列,水平滾動。
  • 和 QTreeView 一樣,要求模型提供父子關系。

4.2 常用類

在這里插入圖片描述

4.3 使用示例

使用 QFileSystemModel 顯示文件夾結構:

#include <QApplication>
#include <QColumnView>
#include <QFileSystemModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QColumnView *columnView = new QColumnView;QFileSystemModel *model = new QFileSystemModel;model->setRootPath(QDir::rootPath()); // 設置根路徑columnView->setModel(model);columnView->setRootIndex(model->index(QDir::homePath())); // 設置初始顯示目錄columnView->setWindowTitle("QColumnView 示例 - 文件瀏覽器");columnView->resize(800, 400);columnView->show();return app.exec();
}

輸出結果:
在這里插入圖片描述

4.4 使用自定義樹結構數據

#include <QApplication>
#include <QColumnView>
#include <QStandardItemModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QColumnView *columnView = new QColumnView;QStandardItemModel *model = new QStandardItemModel;QStandardItem *root = new QStandardItem("動物");QStandardItem *mammal = new QStandardItem("哺乳動物");mammal->appendRow(new QStandardItem("老虎"));mammal->appendRow(new QStandardItem("獅子"));QStandardItem *bird = new QStandardItem("鳥類");bird->appendRow(new QStandardItem("麻雀"));bird->appendRow(new QStandardItem("烏鴉"));root->appendRow(mammal);root->appendRow(bird);model->appendRow(root);columnView->setModel(model);columnView->setRootIndex(model->index(0, 0)); // 設定根節點columnView->setWindowTitle("QColumnView 示例 - 文件瀏覽器");columnView->resize(800, 400);columnView->show();return app.exec();
}

輸出結果:
在這里插入圖片描述

4.5 常用方法

在這里插入圖片描述

4.6 與 QTreeView 的區別

在這里插入圖片描述

五、撤銷命令視圖(Undo View)

5.1 基本概念

??在 Qt 中,撤銷命令視圖(QUndoView)是用于展示和管理命令模式撤銷/重做操作歷史記錄的一個視圖類。它配合 QUndoStack 或 QUndoGroup 使用,能夠圖形化地顯示用戶執行過的操作,并允許用戶點擊某個歷史命令進行撤銷或重做。

Qt 中的撤銷框架基于命令模式,主要類如下:
- List item

5.2 使用示例

基本撤銷命令視圖:

自定義命令類

#include <QUndoCommand>
#include <QString>
#include <QDebug>class PrintCommand : public QUndoCommand {
public:PrintCommand(const QString &text) : m_text(text) {setText("Print: " + text); // 設置在 UndoView 中顯示的文本}void undo() override {qDebug() << "Undo:" << m_text;}void redo() override {qDebug() << "Redo:" << m_text;}private:QString m_text;
};

創建主窗口并綁定 QUndoView

#include <QApplication>
#include <QUndoView>
#include <QUndoStack>
#include <QVBoxLayout>
#include <QPushButton>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QUndoStack *undoStack = new QUndoStack(&window);QUndoView *undoView = new QUndoView(undoStack); // 綁定命令棧QPushButton *addButton = new QPushButton("添加命令");layout.addWidget(addButton);layout.addWidget(undoView);QObject::connect(addButton, &QPushButton::clicked, [&]() {static int count = 1;undoStack->push(new PrintCommand(QString("命令%1").arg(count++)));});window.setWindowTitle("QUndoView 示例");window.resize(300, 300);window.show();return app.exec();
}

輸出結果:
請添加圖片描述

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

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

相關文章

GoWeb開發(基礎)

Go&#xff08;Golang&#xff09;是一種高效、簡潔的編程語言&#xff0c;特別適合Web開發。以下是詳細的Go Web開發指南&#xff0c;涵蓋從基礎到進階的內容。 --- 一、Go Web開發基礎 1. 標準庫 net/http Go 內置 net/http 包&#xff0c;支持快速構建 Web 服務。 - 基本示…

GSENSE2020BSI sCMOS科學級相機主要參數及應用場景

GSENSE2020BSI sCMOS科學級相機是一款面向寬光譜成像需求的高性能科學成像設備&#xff0c;結合了背照式&#xff08;Back-Side Illuminated, BSI&#xff09;CMOS技術與先進信號處理算法&#xff0c;適用于天文觀測、生物醫學成像、工業檢測等領域。以下是其核心特點及技術細節…

【日擼 Java 三百行】Day 9(While語句)

目錄 Day 9&#xff1a;While 語句的基本使用方法 一、基礎知識及案例分析 二、代碼及測試 拓展&#xff1a;流程控制語句專題補充 小結 Day 9&#xff1a;While 語句的基本使用方法 Task&#xff1a; while 語句本質上比 for 更基礎, 因此可以替代后者. 但 for 在很多時候…

React 第三十七節 Router 中 useOutlet Hook的使用介紹以及注意事項

React Router 中的 useOutlet 是 v6 版本新增的 Hook&#xff0c;用于在父路由組件中訪問當前嵌套的子路由元素。它提供了比 <Outlet> 組件更靈活的控制方式&#xff0c;適合需要根據子路由狀態進行動態處理的場景。 一、useOutlet的基本用法 import { useOutlet } fro…

TDengine 在智慧油田領域的應用

簡介 智慧油田&#xff0c;亦稱為數字油田或智能油田&#xff0c;是一種采用尖端信息技術與先進裝備的現代油田開發模式。該模式通過實時更新油氣田層析圖及動態生產數據&#xff0c;顯著提高了油氣田的開發效率與經濟價值。 信息技術在此領域發揮著至關重要的作用&#xff0…

關于AI 大數據模型的基礎知識 雜記

一、LM Studio LM Studio下載地址&#xff1a;LM Studio - Discover, download, and run local LLMshttps://lmstudio.ai/LM Studio是使用electron架構&#xff0c;引用的llama.cpp庫。 下載后的模型存儲于 /User/Admin/.lmstudio/models中。 二、llama.cpp庫下載地址 llam…

2025數維杯數學建模競賽B題完整參考論文(共38頁)(含模型、代碼、數據)

2025數維杯數學建模競賽B題完整參考論文 目錄 摘要 一、問題重述 二、問題分析 三、模型假設 四、定義與符號說明 五、 模型建立與求解 5.1問題1 5.1.1問題1思路分析 5.1.2問題1模型建立 5.1.3問題1求解結果 5.2問題2 5.2.1問題2思路分析 5.2.2問題2…

利用GPT實現油猴腳本—網頁滾動(優化版)

在瀏覽網頁的時候&#xff0c;發現有的網頁沒有直達最前這樣的功能&#xff0c;所有心血來潮利用ChatGPT寫了一個油猴腳本以實現此功能&#xff0c;在網站上出現一個可以自由拖動的滑塊。 聲明&#xff1a;引用或二創需注明出處。 如圖&#xff1a; 點擊即可直達當前網頁最前、…

MySQL基礎關鍵_013_常用 DBA 命令

目 錄 一、MySQL 用戶信息存儲位置 二、新建用戶 1.創建本地用戶 2.創建外網用戶 三、用戶授權 1.說明 2.實例 四、撤銷授權 五、修改用戶密碼 六、修改用戶名、主機名/IP地址 七、刪除用戶 八、數據備份 1.導出數據 2.導入數據 &#xff08;1&#xff09;方式…

計算機視覺與深度學習 | 圖像匹配算法綜述

圖像匹配算法綜述 圖像匹配 圖像匹配算法綜述一、算法分類二、經典算法原理與公式1. **SIFT (Scale-Invariant Feature Transform)**2. **ORB (Oriented FAST and Rotated BRIEF)**3. **模板匹配(歸一化互相關,NCC)**4. **SuperPoint(深度學習)**三、代碼示例1. **SIFT 特…

切比雪夫不等式詳解

切比雪夫不等式詳解 一、引言 切比雪夫不等式&#xff08;Chebyshev’s Inequality&#xff09;是概率論和統計學中最重要的基本定理之一&#xff0c;由俄國數學家切比雪夫&#xff08;P. L. Chebyshev&#xff0c;1821-1894&#xff09;提出。它為我們提供了一個強大工具&am…

霸王茶姬微信小程序自動化簽到系統完整實現解析

霸王茶姬微信小程序自動化簽到系統完整實現解析 技術棧&#xff1a;Node.js 微信小程序API MD5動態簽名 一、腳本全景架構 功能模塊圖 #mermaid-svg-0vx5W2xo0IZWn6mH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

氣動帶刮刀硬密封固定式對夾球閥:專為高粘度、強腐蝕性介質設計的工業解決方案-耀圣

氣動帶刮刀硬密封固定式對夾球閥&#xff1a;專為高粘度、強腐蝕性介質設計的工業解決方案 在石油化工、鋰電材料、污水處理等高難度工況中&#xff0c;帶顆粒的高粘度介質、料漿及強腐蝕性流體對閥門的性能提出了嚴苛要求。 氣動帶刮刀硬密封固定式對夾球閥憑借其獨特的結構…

Filecoin存儲管理:如何停止Lotus向特定存儲路徑寫入新扇區數據

Filecoin存儲管理&#xff1a;如何停止Lotus向特定存儲路徑寫入新扇區數據 引言背景問題場景解決方案步驟1&#xff1a;修改sectorstore.json文件步驟2&#xff1a;重新加載存儲配置步驟3&#xff1a;驗證更改 技術原理替代方案最佳實踐結論 引言 在Filecoin挖礦過程中&#x…

互聯網大廠Java求職面試:高并發系統設計與架構實戰

互聯網大廠Java求職面試&#xff1a; 高并發系統設計與架構實戰 第一輪提問&#xff1a;基礎概念與核心原理 技術總監&#xff08;嚴肅&#xff09;&#xff1a;鄭薪苦&#xff0c;你對JVM的內存模型了解多少&#xff1f;能說說堆、棧、方法區的區別嗎&#xff1f; 鄭薪苦&a…

AD原理圖復制較多元器件時報錯:“InvalidParameter Exception Occurred In Copy”

一、問題描述 AD原理圖復制較多元器件時報錯&#xff1a;AD原理圖復制較多元器件時報錯&#xff1a;“InvalidParameter Exception Occurred In Copy”。如下圖 二、問題分析 破解BUG。 三、解決方案 1、打開參數配置 2、打開原理圖優先項中的通用配置&#xff0c;取消勾選G…

網絡研討會開發注冊中, 5月15日特勵達力科,“了解以太網”

在線研討會主題 Understanding Ethernet - from basics to testing & optimization 了解以太網 - 從基礎知識到測試和優化 注冊鏈接# https://register.gotowebinar.com/register/2823468241337063262 時間 北京時間 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 適宜…

Spring Boot中的攔截器!

每次用戶請求到達Spring Boot服務端&#xff0c;你是否需要重復寫日志、權限檢查或請求格式化代碼&#xff1f;這些繁瑣的“前置后置”工作讓人頭疼&#xff01;好在&#xff0c;Spring Boot攔截器如同一道智能關卡&#xff0c;統一處理請求的橫切邏輯&#xff0c;讓代碼優雅又…

三個線程 a、b、c 并發運行,b,c 需要 a 線程的數據如何解決

說明&#xff1a; 開發中經常會碰到線程并發&#xff0c;但是后續線程需要等待第一個線程執行完返回結果后&#xff0c;才能再執行后面線程。 如何處理呢&#xff0c;今天就介紹兩種方法 1、使用Java自有的API即CountDownLatch&#xff0c;進行實現 思考&#xff1a;CountDown…

js原型污染 + xss劫持base -- no-code b01lersctf 2025

題目信息:Found this new web framework the other day—you don’t need to write any code, just JSON. 我們先來搞清楚究竟發生了什么 當我們訪問 /index /*** 處理 /:page 路徑的 GET 請求* param {Object} req - 請求對象* param {Object} reply - 響應對象* returns {Pro…