我有以下代码列出listView中的文件:
fileModel = new QFileSystemModel(this);
ui->listView->setModel(fileModel);
ui->listView->setRootIndex(fileModel->setRootPath(filePath));
我想获取路径中文件的列表/映射。怎么办呢?
答案 0 :(得分:5)
以下代码段可以执行您想要的操作:
QList<QString> path_list;
QModelIndex parentIndex = fileModel->index(filePath);
int numRows = fileModel->rowCount(parentIndex);
for (int row = 0; row < numRows; ++row) {
QModelIndex childIndex = fileModel->index(row, 0, parentIndex);
QString path = fileModel->data(childIndex).toString();
path_list.append(path);
}
有一件事你不应该忘记。来自documentation:
与QDirModel(已废弃)不同,QFileSystemModel使用单独的线程 填充自己,这样就不会导致主线程挂起 正在查询文件系统。对rowCount()的调用将返回0直到 该模型填充目录。
因此,您必须等到在启动模型后从QFileSystemModel收到directoryLoaded(const QString & path)
信号,然后填写您的列表。