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 | 设置所有列是否显示焦点 |
代码测试
#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));}
效果展示