如何让QTreeView顶层显示可展开的全部可用驱动器列表?
解决方案:让QTreeView顶层显示所有可用驱动器
你的代码当前只显示C盘,是因为treeView->setRootIndex(model->index(QDir::rootPath()));强制将树的根节点设为了系统根路径(Windows下就是C:\)。要展示所有可用驱动器,只需要调整树视图的根索引设置即可。
修改步骤
- 删除
treeView->setRootIndex(model->index(QDir::rootPath()));这一行,或者将其替换为treeView->setRootIndex(model->index(""));
修改后的完整代码
#include <QApplication> #include <QTreeView> #include <QFileSystemModel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QFileSystemModel *model = new QFileSystemModel; model->setRootPath(""); model->setFilter(QDir::Drives | QDir::NoDotAndDotDot | QDir::AllDirs | QDir::NoSymLinks); QTreeView *treeView = new QTreeView; treeView->setModel(model); // 替换为对应所有驱动器的顶层节点索引 treeView->setRootIndex(model->index("")); for (int i = 1; i < model->columnCount(); ++i) { treeView->setColumnHidden(i, true); } treeView->setColumnWidth(0, 250); treeView->setWindowTitle("QFileSystemModel Example"); treeView->resize(600, 400); treeView->show(); return app.exec(); }
关键说明
- 当
QFileSystemModel设置setRootPath("")时,model->index("")对应的是包含所有可用驱动器的顶层节点,将树视图的根索引设为此节点,就能直接展示所有可展开的驱动器列表。 - 如果你选择删除根索引设置的代码行,QTreeView会默认使用模型的隐形根节点,而
QFileSystemModel的隐形根节点的子节点就是所有可用驱动器,效果完全一致。
内容的提问来源于stack exchange,提问作者Joe J
相关产品推荐
相关产品推荐

