QTreeView

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <QApplication>
#include <QWidget>
#include <QTreeView>
#include <QFileSystemModel>
#include <QVBoxLayout>
#include <QLabel>
#include <QHeaderView>

void setupTreeViewDemo(QWidget *parent) {
QVBoxLayout *layout = new QVBoxLayout(parent);

// --- 1. 创建模型 (Model) ---
// QFileSystemModel 是专门为读取本地文件系统优化的模型
QFileSystemModel *model = new QFileSystemModel(parent);
model->setRootPath(QDir::currentPath()); // 设置监控的根路径

// --- 2. 创建视图 (View) ---
QTreeView *treeView = new QTreeView(parent);
treeView->setModel(model); // 将文件系统模型注入视图

// --- 3. 视图外观配置 ---
// 默认显示所有列,我们可以设置只看当前目录
treeView->setRootIndex(model->index(QDir::currentPath()));

// 设置列宽自动伸展
treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);

// 允许排序
treeView->setSortingEnabled(true);
treeView->sortByColumn(0, Qt::AscendingOrder);

// --- 4. 信号:双击打开文件信息 ---
QObject::connect(treeView, &QTreeView::doubleClicked, [model](const QModelIndex &index) {
if (model->fileInfo(index).isFile()) {
qDebug() << "你双击了一个文件:" << model->filePath(index);
} else {
qDebug() << "你双击了一个目录:" << model->fileName(index);
}
});

layout->addWidget(new QLabel("QTreeView - 实时文件系统预览:"));
layout->addWidget(treeView);
}

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("QTreeView 系统浏览器");
w.resize(600, 400);
setupTreeViewDemo(&w);
w.show();
return a.exec();
}