QT6(QFileSystemModel和QTreeView)

QT6


QFileSystemModel和QTreeView

  • QFileSystemModel为本机的文件系统提供一个模型,QFileSystemModelt和QTreeView结合使用,可以用目录树的形式显示本机的文件系统,如同Windows的资源管理器一样
  • 使用QFileSystemModel提供的接口函数,我们可以创建目录、删除目录、重命名目录、可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详情情况

QTreeView常用属性和方法

模型相关

属性/方法 类型 描述
model() QAbstractItemModel* 获取视图使用的数据模型
setModel() void 设置视图的数据模型
selectionModel() QItemSelectionModel* 获取选择模型
setSelectionModel() void 设置选择模型

外观与布局

属性/方法 类型 描述
indentation() int 获取缩进宽度
setIndentation() void 设置缩进宽度
uniformRowHeights() bool 获取是否使用统一行高
setUniformRowHeights() void 设置是否使用统一行高
columnWidth() int 获取指定列的宽度
setColumnWidth() void 设置指定列的宽度
header() QHeaderView* 获取表头视图
setHeader() void 设置表头视图
wordWrap() bool 获取是否自动换行
setWordWrap() void 设置是否自动换行

展开/折叠操作

属性/方法 类型 描述
expandsOnDoubleClick() bool 获取是否双击展开项
setExpandsOnDoubleClick() bool 设置是否双击展开项
itemsExpandable() bool 获取项是否可展开
setItemsExpandable() void 设置项是否可展开
rootIsDecorated() bool 获取根项是否显示装饰
setRootIsDecorated() void 设置根项是否显示装饰
expand() void 展开指定索引的项
collapse() void 折叠指定索引的项
expandAll() void 展开所有项
collapseAll() void 折叠所有项
expandRecursively() void 递归展开项
isExpanded() bool 检查指定索引的项是否展开

选择操作

属性/方法 类型 描述
setSelectionMode() void 设置选择模式
selectionMode() QAbstractItemView::SelectionMode 获取选择模式
setSelectionBehavior() void 设置选择行为
selectionBehavior() QAbstractItemView::SelectionBehavior 获取选择行为
currentIndex() QModelIndex 获取当前选中项的索引
setCurrentIndex() void 设置当前选中项
selectedIndexes() QModelIndexList 获取所有选中项的索引列表
clearSelection() void 清除所有选择
selectAll() void 选择所有项

编辑功能

属性/方法 类型 描述
edit() void 编辑指定索引的项
setEditTriggers() void 设置编辑触发器
editTriggers() EditTriggers 获取编辑触发器

排序功能

属性/方法 类型 描述
sortByColumn() void 按指定列排序
setSortingEnabled() void 启用或禁用排序
isSortingEnabled() bool 检查是否启用排序

视图操作

属性/方法 类型 描述
indexAt() QModelIndex 获取指定位置的模型索引
visualRect() QRect 获取指定索引的可视矩形区域
scrollTo() void 滚动到指定索引
resizeColumnToContents() void 调整列宽以适应内容

动画效果

属性/方法 类型 描述
animated() bool 获取是否启用动画效果
setAnimated() void 设置是否启用动画效果

焦点显示

属性/方法 类型 描述
allColumnsShowFocus() bool 获取所有列是否显示焦点
setAllColumnsShowFocus() void 设置所有列是否显示焦点

代码测试

cpp 复制代码
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileSystemModel>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 创建model对象
    m_model = new QFileSystemModel(this);
    // 设置model对象
    ui->tableView->setModel(m_model);
    ui->tableView->setShowGrid(false);
    ui->treeView ->setModel(m_model);
    ui->listView->setModel(m_model);
    // 初始化
    m_model->setRootPath(QDir::currentPath());

    // 设置初始化目录
    ui->treeView->setRootIndex(m_model->index(QDir::currentPath()));

    connect(ui->treeView,&QTreeView::clicked,ui->listView,&QListView::setRootIndex);
    connect(ui->treeView,&QTreeView::clicked,ui->tableView,&QTableView::setRootIndex);



}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionSetRoot_triggered()
{
    // 设置根目录

    QString dirStr = QFileDialog::getExistingDirectory(this,"选择目录",QDir::currentPath());
    if(dirStr.isEmpty()) return;
    ui->treeView->setRootIndex(m_model->index(dirStr));
    ui->listView->setRootIndex(m_model->index(dirStr));
    ui->tableView->setRootIndex(m_model->index(dirStr));


}


void MainWindow::on_radioButtonShowRootAndFile_clicked()
{
    m_model->setFilter(QDir::AllDirs|QDir::Files|QDir::NoDotAndDotDot);
    ui->groupBox_4->setEnabled(true);
}


void MainWindow::on_radioButtonOnlyFile_clicked()
{
    m_model->setFilter(QDir::AllDirs|QDir::NoDotAndDotDot);
    ui->groupBox_4->setEnabled(false);
}


void MainWindow::on_checkBoxFileFilter_clicked(bool checked)
{
    ui->comboBox->setEnabled(checked);
    ui->pushButton->setEnabled(checked);
    m_model->setNameFilterDisables(!checked);


}


void MainWindow::on_pushButton_clicked()
{
    QStringList filter = ui->comboBox->currentText().trimmed().split(",",Qt::SkipEmptyParts);
    m_model->setNameFilters(filter);

}


void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    ui->labelFileName->setText(QString("文件名称:%1").arg(m_model->fileName(index)));
    ui->labelFileSize->setText(QString("文件大小:%1 %2").arg(m_model->size(index)/1024).arg("KB"));
    ui->labelPathName->setText(QString("文件路径:%1").arg(m_model->filePath(index)));
    ui->labelNoedType->setText(QString("节点类型:%1").arg(m_model->type(index)));
    ui->checkBoxIsCatalog->setChecked(m_model->isDir(index));

}

效果展示


相关推荐
qwertyuiop_i6 天前
QT6(QStringListModel和QListView)
qt6·qlistview·qstringlistmod
qwertyuiop_i18 天前
使用CMAKE-GU生成Visual Studio项目
visual studio·qt6·sln
yxc_inspire3 个月前
基于Qt的app开发第十五天
c++·qt·面向对象·qtreeview
charlie1145141914 个月前
基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Adapter文档
arm开发·qt·学习·pdf·教程·设计·qt6
容沁风7 个月前
Qt6+libonvif从大华相机抓拍图片
c++·qt6·海康威视·大华·snap
刘亿辰10 个月前
(三)第一个Qt程序“Qt版本的HelloWorld”
c++·qt·qt6·hello world·qt6.2.2
QT界面美化1 年前
QT硬件通讯基础
qt·qt6·qt quick
喵呜角角1 年前
QML鼠标右键菜单
qt·学习·qml·qt6·qt quick
三雷科技1 年前
QSharedMemory使用详解
c++·qt·qt5·qt6·qt教程·qt入门·qsharedmemory