1

我正在使用 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);
}
4

1 回答 1

0

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

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

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

是一个类似的问题(更改过滤器没有更新模型)以这种方式解决。

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

只需更改调整大小模式:

void QHeaderView::setSectionResizeMode(int logicalIndex, ResizeMode mode)
于 2013-07-23T13:04:20.653 回答