【问题标题】:Can't move/rename/delete folder while some of its subfolders are expanded in QFileSystemModel在 QFileSystemModel 中展开某些子文件夹时无法移动/重命名/删除文件夹
【发布时间】:2019-06-18 00:47:12
【问题描述】:

我正在 Windows 上开发 Qt 应用程序。为了显示特定文件夹的文件,我将 QTreeView 与 QFileSystemModel 一起使用。到目前为止一切都很好,但我遇到了一个非常具体的问题,这让我抓狂:当我在我的应用程序中扩展了一个文件夹时,我无法对它的父文件夹做任何事情。

我构建了一个小项目只是为了说明这个问题。下面是我如何定义我的 QFileSystemModel 并将其应用到我的 QTreeView:

QFileSystemModel *myModel = new QFileSystemModel;
myModel->setRootPath(myRootPath);
ui->treeView->setModel(myModel);

为了说明我的问题,请查看此图片

虽然我没有展开“测试文件夹 2”,但我可以对“测试文件夹”做我想做的事情。我可以通过 Windows 资源管理器重命名、移动甚至删除,一切都应用到我的程序中。但是,当我展开“测试文件夹 2”时,突然我的“测试文件夹”不再可编辑。 Windows 说该文件夹“在另一个应用程序中打开”。

我相信任何人都可以用上面的三行来重现这个问题,所以我不认为这是一个项目特定的问题。有谁知道为什么会这样?

编辑: 显然这是一个只有 Windows 的问题。刚刚在linux上试过,效果很好。这是 NTFS 问题吗?有什么想法吗?

【问题讨论】:

    标签: c++ qt qfilesystemmodel


    【解决方案1】:

    您应该尝试设置只读属性。

    #include <QApplication>
    #include <QTreeView>
    #include <QFileSystemModel>
    
    int main(int argc, char** args) {
        QApplication app(argc, args);
        auto myModel = new QFileSystemModel;
        myModel->setReadOnly(true);
        auto treeView = new QTreeView;
        myModel->setRootPath("C:/Temp/A");
        treeView->setModel(myModel);
        treeView->show();
        app.exec();
    }
    

    【讨论】:

    • @PericlesCarvalho:这很奇怪。我用setReadOnly(false) 尝试过,但无法编辑文件夹。然后我改成setReadOnly(true),它成功了。
    • @PericlesCarvalho:刚刚在 Ubuntu 下再次尝试,仍然是相同的期望行为。
    • 这确实很奇怪,因为我使用的是 Linux Mint(ext4 文件系统),即使我不使用 setReadOnly,它也能正常工作。在 Windows(NTFS 文件系统)上,这两种方式都不起作用。您使用的是哪个 Qt 版本?
    • @PericlesCarvalho:qtdiag 说我在家使用的是 Qt 5.9.5!在工作中它是 5.10.0,它也在 Windows 7 上运行。
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2023-04-07
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多