如何从QT中的QFileSystemModel获取文件路径(C++)

weixin_38062058 2019-09-12 03:41:54

首先,假设存在一个存储多个图像的文件夹。然后,我尝试单击UI中的按钮打开文件夹,然后将该文件夹中所有图像的文件路径保存到QList(仅限过滤的图像文件)。但QList不存储任何东西。请帮忙。 void MainWindow::on_pushButton_clicked() { QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), "/home", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); model = new QFileSystemModel(); filesPath = dir; model->setRootPath(dir); QStringList filter; filter <<"*.png" <<"*.jpg" <<"*.bmp" <<"*.gif"; model->setNameFilters(filter); model->setNameFilterDisables(false); ui->treeView->setModel(model); ui->treeView->setRootIndex(model->index(dir)); ui->treeView->setAnimated(false); ui->treeView->setSortingEnabled(true); QList<QString> path_list; QModelIndex parentIndex = model->index(dir); int numRows = model->rowCount(parentIndex); for (int row = 0; row < numRows; ++row) { QModelIndex childIndex = model->index(row, 0, parentIndex); QString path = model->data(childIndex).toString(); if(!QFileInfo(path).isDir()) path_list.append(path); } }








...全文
428 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38090265 2019-09-12
  • 打赏
  • 举报
回复

如果您使用QDir::entryList()而不是相应的过滤器,则可以实现您的目标,并且代码和开销更少。
weixin_38091872 2019-09-12
  • 打赏
  • 举报
回复

正如评论中提到的那样,QFileSystemModel的设计并非如此。这里的关键是在你指着(重点煤矿)的文档: 不像QDirModel,QFileSystemModel使用一个单独的线程来填充自身,所以不会造成主线程挂起,文件系统被查询。 调用rowCount()将返回0,直到模型填充目录。 如果你绝对想用QFileSystemModel建立一个列表,你必须一个功能连接到directoryLoaded(const QString &path)信号和每个文件夹中,一旦它被加载的文件添加...但也有大概是多少更好的方法来完成你所需要的。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧