QT开发
我现在需要实现如下图所示图形界面。
具体要求:
1. 左侧自动读入电脑的所有文件目录,用户点击目录可以逐级选择子目录。最上层目录是C盘、D盘、E盘。
2. 如果选中的子目录中包含后缀为.HDB的文本文件,就读取子目录中的所有HDB文件,逐个打开HDB文件,读取文件的相关信息,然后以一行的形式显示在右侧的表格中。
3. 读取文件信息的功能在源程序的主函数中已经实现,现在我的主要问题是不知道怎么实现QT的可视化。
要在Qt中实现目录树,您可以使用QTreeView和QFileSystemModel类。下面是一个简单的示例代码,可以将当前目录的文件和文件夹显示在目录树中:
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个QFileSystemModel对象,设置根路径为当前目录
QFileSystemModel model;
model.setRootPath(QDir::currentPath());
// 创建一个QTreeView对象,并将QFileSystemModel对象设置为其模型
QTreeView treeView;
treeView.setModel(&model);
// 将目录树设置为可编辑
treeView.setEditTriggers(QAbstractItemView::NoEditTriggers);
// 显示目录树
treeView.show();
return a.exec();
}
这个示例代码创建了一个QFileSystemModel对象,并将其设置为QTreeView的模型。在创建QFileSystemModel对象时,我们将根路径设置为当前目录。这将导致QFileSystemModel对象显示当前目录下的所有文件和文件夹。最后,我们将QTreeView对象设置为不可编辑,并将其显示在屏幕上。
您可以根据需要修改QFileSystemModel和QTreeView的属性以满足您的需求。例如,您可以使用QFileSystemModel的setFilter方法来过滤显示的文件类型。
表格可以使用QTableView实现;
也可以看这里https://blog.csdn.net/qq_43627907/article/details/125677496
```c++
cpp
#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QFileSystemModel>
#include <QVBoxLayout>
#include <QTableView>
#include <QStandardItem>
#include <QDir>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建左侧目录树视图
QTreeView* treeView = new QTreeView;
QFileSystemModel* fileModel = new QFileSystemModel(treeView);
fileModel->setRootPath(QDir::rootPath()); // 设置根路径为C盘、D盘、E盘等
treeView->setModel(fileModel);
treeView->setRootIndex(fileModel->index(QDir::rootPath())); // 显示根目录
// 创建右侧表格视图
QTableView* tableView = new QTableView;
QStandardItemModel* tableModel = new QStandardItemModel(tableView);
tableModel->setColumnCount(3); // 表格有三列:文件名、文件大小、文件类型
QStringList headers = {"文件名", "文件大小", "文件类型"};
tableModel->setHorizontalHeaderLabels(headers); // 设置表头
tableView->setModel(tableModel);
// 连接左侧目录树视图和右侧表格视图
QObject::connect(treeView, &QTreeView::clicked, [=](const QModelIndex& index) {
QString path = fileModel->filePath(index); // 获取当前目录路径
QDir dir(path);
QStringList filter;
filter << "*.HDB"; // 过滤后缀为.HDB的文件
QFileInfoList fileList = dir.entryInfoList(filter, QDir::Files | QDir::NoSymLinks); // 获取目录中所有符合条件的文件列表
tableModel->removeRows(0, tableModel->rowCount()); // 先清空表格数据
foreach(QFileInfo fileInfo, fileList) {
QList<QStandardItem*> rowItems;
rowItems.append(new QStandardItem(fileInfo.fileName())); // 文件名
rowItems.append(new QStandardItem(QString::number(fileInfo.size()))); // 文件大小
rowItems.append(new QStandardItem(fileInfo.suffix())); // 文件类型
tableModel->appendRow(rowItems); // 添加一行表格数据
}
});
// 创建主窗口并布局
QWidget* mainWidget = new QWidget;
QVBoxLayout* mainLayout = new QVBoxLayout(mainWidget);
mainLayout->addWidget(treeView);
mainLayout->addWidget(tableView);
mainWidget->show();
return a.exec();
}
这段代码中,我们首先创建了一个左侧的目录树视图 QTreeView 和一个右侧的表格视图 QTableView。通过 QFileSystemModel 类来实现目录树视图的自动读入电脑的所有文件目录,并且支持逐级选择子目录。通过 QStandardItemModel 类来实现表格视图的数据模型,以及支持根据选中的子目录中包含的.HDB文件读取相关信息并在表格中一行一行的显示。
在连接左侧目录树视图和右侧表格视图时,我们通过 QObject::connect 函数来实现点击目录树视图中的子目录时,获取当前目录路径,并基于该路径获取子目录中符合条件的.HDB文件列表。然后根据列表中每个文件的文件名、文件大小和文件类型创建一个 QStandardItem 对象,将这些 QStandardItem 对象添加到 QStandardItemModel 中,并更新表格视图显示。
需要注意的是,这只是一个示例代码,实际应用中需要根据具体需求进行适当修改和扩展。
```
不知道你这个问题是否已经解决, 如果还没有解决的话:第一种方式直接用代码,绝对路径没什么好说的,直接操作就好了
但是实际开发中更多的会使用第二种,一个qrc文件中可以包含多个图片多个前缀、qrc文件类似于一个资源集合的文件
个人觉得比较难用的是这个添加前缀,这个前缀有点多余和难以操作,如果是第一次操作,面对这个添加前缀可能一脸懵逼,不知道意义在哪里
实际上必须先添加前缀才能添加文件,这个交互说实话QT做的没有VS好