Qt進階開發:QDirModel的使用

文章目錄

    • 一、QDirModel的基本介紹
    • 二、QDirModel的基本使用
      • 2.1 在 QTreeView 中顯示文件系統
      • 2.2 在 QListView 顯示當前目錄
      • 2.3 在 QTableView 中使用
    • 三、QDirModel的常用API
      • 1. 構造 & 目錄操作
        • 1.1 創建 QDirModel
        • 1.2 設置根目錄
      • 2. 過濾 & 排序
        • 2.1 過濾文件類型
        • 2.2 設置排序
      • 3. 獲取文件信息
        • 3.1 獲取文件名
        • 3.2 獲取文件完整路徑
        • 3.3 判斷是否是目錄
        • 3.4 獲取文件大小
        • 3.5 獲取文件修改時間
        • 3.6 獲取文件類型
      • 4. 索引操作
        • 4.1 通過路徑獲取 QModelIndex
        • 4.2 通過 QModelIndex 獲取父目錄
        • 4.3 獲取子目錄
      • 5. 監聽文件選擇
    • 四、監聽文件系統變化

一、QDirModel的基本介紹

??QDirModel是 Qt 早期用于顯示文件系統(目錄、文件)的 QAbstractItemModel 之一,它用于配合 QTreeView 以層級結構顯示文件夾和文件。需要注意的是QDirModel 在 Qt 4.6 之后被 QFileSystemModel 取代,不推薦在新項目中使用 QDirModel,應使用 QFileSystemModel 代替。
它們的主要區別:

  • QDirModel 會加載所有子目錄和文件,導致大量目錄時性能較差。
  • QFileSystemModel 是懶加載的,不會預加載所有子目錄,性能更好。

二、QDirModel的基本使用

2.1 在 QTreeView 中顯示文件系統

#include <QApplication>
#include <QTreeView>
#include <QDirModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建 QDirModelQDirModel model;model.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); // 顯示所有文件和文件夾// 創建 QTreeViewQTreeView treeView;treeView.setModel(&model);// 設置根目錄(桌面路徑)QModelIndex rootIndex = model.index(QDir::homePath());  treeView.setRootIndex(rootIndex);// 顯示窗口treeView.resize(800, 600);treeView.show();return app.exec();
}

在這里插入圖片描述

2.2 在 QListView 顯示當前目錄

#include <QApplication>
#include <QListView>
#include <QDirModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建 QDirModelQDirModel model;model.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);// 創建 QListViewQListView listView;listView.setModel(&model);// 設置要顯示的目錄listView.setRootIndex(model.index(QDir::homePath()));listView.show();return app.exec();
}

在這里插入圖片描述

2.3 在 QTableView 中使用

#include <QApplication>
#include <QTableView>
#include <QDirModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 創建 QDirModelQDirModel model;model.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);// 創建 QTableViewQTableView tableView;tableView.setModel(&model);// 設置要顯示的目錄tableView.setRootIndex(model.index(QDir::homePath()));tableView.resize(800, 600);tableView.show();return app.exec();
}

在這里插入圖片描述

三、QDirModel的常用API

1. 構造 & 目錄操作

1.1 創建 QDirModel
QDirModel *model = new QDirModel(parent);

作用:創建 QDirModel,用于顯示文件系統。

1.2 設置根目錄
model->setRootPath(QDir::homePath());  // 設置為用戶主目錄

作用:設置 QDirModel 的根目錄,但不會影響 QTreeView 的 setRootIndex()。

2. 過濾 & 排序

2.1 過濾文件類型
model->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);

作用:控制 QDirModel 顯示的文件/目錄類型。
可選值:

  • QDir::Files ? 僅顯示文件
  • QDir::Dirs ? 僅顯示目錄
  • QDir::AllEntries ? 顯示所有(默認)
  • QDir::Hidden ? 顯示隱藏文件
  • QDir::NoDotAndDotDot ? 隱藏 . 和 …
2.2 設置排序
model->setSorting(QDir::Name | QDir::IgnoreCase);

作用:控制文件/目錄排序方式。
可選值:

  • QDir::Name ? 按名稱排序
  • QDir::Size ? 按大小排序
  • QDir::Type ? 按類型排序
  • QDir::Time ? 按修改時間排序

3. 獲取文件信息

3.1 獲取文件名
QString fileName = model->fileName(index);

作用:返回 index 對應的文件名(不包含路徑);如file.txt。

3.2 獲取文件完整路徑
QString filePath = model->filePath(index);

作用:返回 index 對應的完整路徑;如/home/user/Documents/file.txt。

3.3 判斷是否是目錄
bool isDirectory = model->isDir(index);

作用:判斷 index 是否是目錄。
返回值:true ? 目錄;false ? 文件。

3.4 獲取文件大小
qint64 size = model->size(index);

作用:獲取 index 對應的文件大小(字節)。例如返回 1024(表示 1 KB)。

3.5 獲取文件修改時間
QDateTime modifiedTime = model->lastModified(index);

作用:返回 index 對應文件的最后修改時間。例如2024-04-01 12:30:45。

3.6 獲取文件類型
QString fileType = model->type(index);

作用:返回文件類型描述(如 文本文件、文件夾)。例如Text File、Folder。

4. 索引操作

4.1 通過路徑獲取 QModelIndex
QModelIndex index = model->index("/home/user/Documents/file.txt");

作用:獲取指定路徑的 QModelIndex,用于 QTreeView、QListView 等。

4.2 通過 QModelIndex 獲取父目錄
QModelIndex parentIndex = model->parent(index);

作用:獲取 index 的父目錄索引。

4.3 獲取子目錄
QModelIndex childIndex = model->index(0, 0, index);

作用:獲取 index 目錄下的第一個文件/子目錄。

5. 監聽文件選擇

QObject::connect(treeView, &QTreeView::clicked, [&](const QModelIndex &index) {QString filePath = model->filePath(index);qDebug() << "用戶選擇了:" << filePath;
});

四、監聽文件系統變化

當某個目錄被成功加載后觸發。

connect(model, &QDirModel::directoryLoaded, [](const QString &path){qDebug() << "Directory loaded:" << path;
});

當某個文件或目錄被重命名時觸發。

connect(model, &QDirModel::fileRenamed, [](const QString &path, const QString &oldName, const QString &newName){qDebug() << "File renamed in" << path << "from" << oldName << "to" << newName;
});

當 setRootPath() 被調用,并且根目錄發生改變時觸發。

connect(model, &QDirModel::rootPathChanged, [](const QString &newPath){qDebug() << "Root path changed to:" << newPath;
});

當新的文件或目錄被添加時觸發。

connect(model, &QDirModel::rowsInserted, [](const QModelIndex &parent, int start, int end){qDebug() << "Rows inserted from" << start << "to" << end << "under parent" << parent;
});

當文件或目錄被刪除時觸發。

connect(model, &QDirModel::rowsRemoved, [](const QModelIndex &parent, int start, int end){qDebug() << "Rows removed from" << start << "to" << end << "under parent" << parent;
});

注意:由于 QDirModel 在 Qt 5 中已被 QFileSystemModel 取代,建議使用 QFileSystemModel。

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

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

相關文章

牛客 除2問題

除2&#xff01; 貪心堆 讓偶數入堆 注意點&#xff1a; 1.判斷堆是否為空再進行操作 2. 為了防止超時&#xff0c;我們采取先求和的方式&#xff0c;后面調整之后再減掉&#xff0c;可以節省一次遍歷的時間。 3.注意數據范圍&#xff0c;要用long long #include<iost…

#MySQL 語句大全(完整實用教程)

&#x1f4cc; MySQL 語句大全&#xff08;完整實用教程&#xff09; &#x1f4cc; 1. 數據庫操作 ? 創建數據庫 CREATE DATABASE mydb; -- 創建名為 mydb 的數據庫? 使用數據庫 USE mydb; -- 選擇數據庫? 刪除數據庫 DROP DATABASE mydb; -- 刪除數據庫&#xff08…

萬字重談C++——類和對象篇

什么是類&#xff1f; 在編程中&#xff0c;類是用來創建對象的模板。可以把類看作一個藍圖&#xff0c;它定義了對象的屬性&#xff08;特征&#xff09;和方法&#xff08;行為&#xff09;。例如&#xff0c;如果我們有一個“學生”的類&#xff0c;它可能包含學生的名字、…

18認識Qt坐標系

平面直角坐標系(笛卡爾坐標系) 數學上的坐標系 右手坐標系 計算機中的坐標系 左手坐標系 坐標系的原點(0,0) 就是屏幕的左上角 /窗口的左上角 給 Qt 的某個控件,設置位置,就需要指定坐標.對于這個控件來說, 坐標系原點就是相對于父窗口/控件的. QPushButton 的父元素/父控件/父…

量子計算與人工智能的結合:未來科技的雙重革命

引言 在過去幾十年里&#xff0c;人工智能&#xff08;AI&#xff09;和計算能力的提升一直是推動科技進步的重要力量。然而&#xff0c;隨著深度學習和大規模數據處理的發展&#xff0c;傳統計算架構的算力瓶頸逐漸顯現&#xff0c;人工智能的訓練和推理效率受到了限制。在此背…

SEO長尾詞優化策略精要

內容概要 長尾關鍵詞優化是SEO策略中實現精準流量捕獲的核心環節。本文從定位方法、搜索意圖分析、詞庫構建三個維度切入&#xff0c;系統闡述如何通過數據化工具篩選高轉化潛力詞&#xff0c;并結合用戶行為路徑優化內容架構。具體而言&#xff0c;內容將覆蓋關鍵詞挖掘工具的…

基于大模型的主動脈瓣病變預測及治療方案研究報告

目錄 一、引言 1.1 研究背景 1.2 研究目的 1.3 研究意義 二、大模型預測主動脈瓣病變原理 2.1 大模型介紹 2.2 數據收集與處理 2.3 模型訓練與優化 三、術前預測與評估 3.1 主動脈瓣病變類型及程度預測 3.2 患者整體狀況評估 3.3 手術風險預測 四、術中應用與監測…

進程和內存管理

目錄 一.進程的基本信息 1.1進程的定義 1.2進程的特征 1.3進程的組成 1.4線程產生的背景 1.5線程的定義 1.6進程與線程的區別 1.7進程的類別 1.8進程的優先級 1.8.1進程優先級的概念 1.8.2PRI和NI 1.9僵尸進程 1.9.1僵尸進程的定義 1.9.2僵尸進程產生的原因 1.9…

css動態設置div寬高,calc函數

在css中使用calc函數 calc() 是 CSS 中的一種函數&#xff0c;用于動態計算長度值。它允許你在 CSS 屬性中進行數學運算&#xff0c;結合不同的單位&#xff08;如 px、%、em 等&#xff09;&#xff0c;從而創建更加靈活和響應式的布局 表達式規則 運算符&#xff1a;支持加…

飛漿PaddlePaddle 貓狗數據大戰

貓狗數據大戰 1 數據集的準備以及處理操作1.1 數據集1.2 文件解壓操作&#xff08;python&#xff09; 1.3 數據的分類1.4 創建訓練集和測試集 2 網絡構建CNN版本--DeepID 人臉識別網絡結構DeepID 與 CNN 網絡結構的差異 3 深度學習模型訓練和推理的核心設置4 制圖5 訓練6 預測…

Spring Boot后端開發全攻略:核心概念與實戰指南

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、全棧領域優質創作者、高級開發工程師、高級信息系統項目管理師、系統架構師&#xff0c;數學與應用數學專業&#xff0c;10年以上多種混合語言開發經驗&#xff0c;從事DICOM醫學影像開發領域多年&#xff0c;熟悉DICOM協議及…

PPT助手:一款集計時、遠程控制與多屏切換于一身的PPT輔助工具

PPT助手&#xff1a;一款集計時、遠程控制與多屏切換于一身的PPT輔助工具 &#x1f4dd;&#x1f3a4; 在現代化的演講和演示中&#xff0c;如何高效地控制PPT進程、保證展示的流暢性與精準性&#xff0c;成為了每個演講者必須面對的挑戰。無論是商務匯報、學術演講&#xff0…

WEB安全--文件上傳漏洞--php偽協議的利用

一、偽協議介紹 1.1、內容 在 PHP 中&#xff0c;偽協議通常指的是一種通過特定的 URL 協議方案實現某些特殊功能或行為的方式。偽協議通常并不是標準的協議&#xff08;如 HTTP、HTTPS&#xff09;&#xff0c;而是由應用程序或開發者自定義的“偽”協議&#xff0c;用于執行…

高級:高并發架構面試題深度解析

一、引言 在現代互聯網應用開發中&#xff0c;高并發架構設計是確保系統在高負載下仍能穩定、高效運行的關鍵。面試官通過相關問題&#xff0c;考察候選人對高并發系統設計的理解、架構模式的掌握以及在實際項目中解決問題的能力。本文將深入剖析高并發系統的設計原則、常見的…

Opencv之dilib庫:表情識別

一、簡介 在計算機視覺領域&#xff0c;表情識別是一個既有趣又具有挑戰性的任務。它在人機交互、情感分析、安防監控等眾多領域都有著廣泛的應用前景。本文將詳細介紹如何使用 Python 中的 OpenCV 庫和 Dlib 庫來實現一個簡單的實時表情識別系統。 二、實現原理 表情識別系統…

【動態規劃】線性dp——LIS和LCS

參考文章 子序列 一個序列 A &#xff1d; a 1 , a 2 , … , a n A&#xff1d;a_1,a_2,…,a_n A&#xff1d;a1?,a2?,…,an? 中任意刪除若干項&#xff0c;剩余的序列叫做 A 的一個子序列。也可以認為是從序列 A 按原順序保留任意若干項得到的序列。&#xff08;例如&…

umi框架開發移動端h5

1、官網&#xff1a;https://umijs.org/ 2、創建出來的項目 yarn create umi yarn start3、推薦目錄結構 . ├── config │ └── config.ts ├── public//靜態資源 ├── dist ├── mock │ └── app.ts&#xff5c;tsx ├── src │ ├── .umi │ ├── .um…

《Golang高性能網絡編程:構建低延遲服務器應用》

在本文中&#xff0c;我們將深入探討Golang高性能網絡編程&#xff0c;幫助您構建低延遲服務器應用。我們將介紹Golang的網絡編程特性、優化技巧和實際案例&#xff0c;讓您更好地理解和應用Golang在網絡編程領域的優勢。 高性能網絡編程簡介 什么是Golang高性能網絡編程 高性能…

循環結構- P1217-回文質數-第三十四天

洛谷題單 第三十四天&#xff1a;4.3&#xff08;周四&#xff09; 題目&#xff1a;循環結構–P1217 注意&#xff01;&#xff01;&#xff01;本題的解法在初學階段足矣&#xff0c;使用埃氏篩即可全部AC&#xff08;高級算法&#xff0c;優化時間復雜度&#xff09;&…

github鏡像網站的使用

很多時候我們無法訪問github 那么我們可以網上搜索鏡像網站 比如 https://blog.csdn.net/eytha/article/details/144797222 這里可以找到一些鏡像站 然后直接編輯 c:/user/xxx/.gitconfig 內容如 [user]name xxxxemail xxxxhotmail.com [gui]recentrepo D:/ProjectFolder/t…