QFileDialog не показывает папку спула

Я прошу пользователя выбрать папку с QFileDialog:

QString directory = QFileDialog::getExistingDirectory(this,"Caption","",
QFileDialog::ShowDirsOnly);

Я хочу, чтобы пользователь мог выбрать ВСЕ папки, однако C: / Windows / System32 / spool / не может быть найден с помощью QFileDialog, и я подозреваю, что могут быть и другие.

Я пытался установить флаг QFileDialog::HideNameFilterDetails для просмотра скрытых файлов, однако, это не помогает.

Есть ли решение этой проблемы?

C: / Windows / System 32 / спул не существует в QFileDialog

введите описание изображения здесь

2

Решение

Это кажется проблемой, когда вы запускаете 32-битное приложение в 64-битной Windows. Вы должны увидеть папку спула, если скомпилируете свое приложение с собственным компилятором x64. В худшем случае вы можете написать простое 64-битное собственное приложение для отображения браузера папок и запустить 32-битное приложение и связаться с 64-битным приложением для получения результатов.

Я надеялся, что отключение Перенаправитель файловой системы WOW64 было бы достаточно, но это не помогло. В соответствии с этот ответ, это может работать, если вы используете Wow64DisableWow64FsRedirection отключить перенаправление на всех потоках в процессе, но этот подход не рекомендуется даже тем, кто ответил на вопрос.

1

Другие решения

Вы не можете использовать эту статическую функцию, чтобы увидеть все папки. QFileDialog выполняет некоторую дополнительную фильтрацию за кулисами, и эта фильтрация не может быть отключена каким-либо очевидным способом с использованием статической функции getExistingDirectory.

Вы можете увидеть все папки, включая скрытые, по:

QFileDialog fd;
fd.setFilter(QDir::Hidden);
fd.setFileMode(QFileDialog::Directory);
fd.exec();
QString directory = fd.directory().path();
0

По вопросам рекламы [email protected]