如何在添加/删除驱动器时更新QFileSystemModel?

时间:2013-07-23 12:26:19

标签: qt qtreeview qfilesystemmodel

我正在使用QFileSystemModel和QTreeView来显示根目录的内容 想要在添加或删除驱动器时刷新qtreeview。

尝试使用刷新按钮通过插槽实现此功能,删除模型并再次将其设置为QTreeView。但问题是,在第二次将模型设置为视图后,它没有将列宽扩展为其内容。

有没有最好的解决方案来实现这一目标。这是一个代码位......

QTreeView fileExplorerTreeView = new QTreeView();
fileExplorerTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
fileExplorerTreeView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);

void loadFileExplorer()
{
    if(fileSystemModel)
    {
        delete fileSystemModel;
        fileSystemModel = 0;
     }

    fileSystemModel = new QFileSystemModel;
    fileSystemModel->setRootPath("");


    fileExplorerTreeView->setModel(fileSystemModel);

    QHeaderView* hHeader = fileExplorerTreeView->header();
    hHeader->hideSection(1);
    hHeader->hideSection(2);
    hHeader->hideSection(3);

    fileExplorerTreeView->resizeColumnToContents(0);
    fileExplorerTreeView->header()->setStretchLastSection(false);
}

1 个答案:

答案 0 :(得分:0)

问题是该模型没有观察fs变化,也没有更新。 而且你希望它能够在更高的层次上进行控制。

因此,如果您将根路径设置为我的计算机,它应该可以工作:

QString rPath = fileSystemModel->myComputer().toString(); 
fileSystemModel->setRootPath(rPath);

Here是一个类似的问题(更改过滤器没有更新模型)这样解决了。

此外,您不必在每次更改时调整表格大小。

只需更改调整大小模式:

void QHeaderView::setSectionResizeMode(int logicalIndex, ResizeMode mode)