如何从QT中的QFileSystemModel获取文件路径(C++)
首先,假设存在一个存储多个图像的文件夹。然后,我尝试单击UI中的按钮打开文件夹,然后将该文件夹中所有图像的文件路径保存到QList(仅限过滤的图像文件)。但QList不存储任何东西。请帮忙。如何从QT中的QFileSystemModel获取文件路径(C++)
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);
}
}
回答:
如果您使用QDir::entryList()
而不是相应的过滤器,则可以实现您的目标,并且代码和开销更少。
回答:
正如评论中提到的那样,QFileSystemModel
的设计并非如此。这里的关键是在你指着(重点煤矿)的文档:
不像QDirModel,QFileSystemModel使用一个单独的线程来填充自身,所以不会造成主线程挂起,文件系统被查询。 调用rowCount()将返回0,直到模型填充目录。
如果你绝对想用QFileSystemModel
建立一个列表,你必须一个功能连接到directoryLoaded(const QString &path)
信号和每个文件夹中,一旦它被加载的文件添加...但也有大概是多少更好的方法来完成你所需要的。
以上是 如何从QT中的QFileSystemModel获取文件路径(C++) 的全部内容, 来源链接: utcz.com/qa/261807.html