Не удается переместить / переименовать / удалить папку, пока некоторые из ее подпапок раскрыты в QFileSystemModel - PullRequest
0 голосов
/ 17 июня 2019

Я занимаюсь разработкой приложения Qt для Windows. Чтобы показать файлы определенной папки, я использую QTreeView вместе с QFileSystemModel. Пока все хорошо, но я столкнулся с очень специфической проблемой, которая сводит меня с ума: пока я работаю с папкой, развернутой в моем приложении, я ничего не могу сделать с ее родительской папкой.

Я создал небольшой проект, чтобы показать эту проблему. Вот как я определяю свой QFileSystemModel и применяю его к моему QTreeView:

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

Чтобы проиллюстрировать мою проблему, посмотрите это изображение

Хотя «Тестовая папка 2» не раскрыта, я могу делать то, что хочу, «Тестовая папка». Я могу переименовать, переместить или даже удалить через Проводник Windows, и все применяется к моей программе. Однако, когда я раскрываю «Тестовую папку 2», моя «Тестовая папка» внезапно становится недоступной для редактирования. Windows говорит, что папка «открыта в другом приложении».

Я полагаю, что любой может воспроизвести эту проблему с тремя строчками выше, поэтому я не думаю, что это проблема конкретного проекта. Кто-нибудь знает, почему это происходит?

РЕДАКТИРОВАТЬ: Очевидно, это проблема только для Windows. Только что попробовал на Linux, и он работал просто отлично. Это проблема NTFS? Есть идеи?

1 Ответ

0 голосов
/ 17 июня 2019

Вы должны попытаться установить свойство только для чтения.

#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();
}
...