Я прошу пользователя выбрать папку с QFileDialog:
QString directory = QFileDialog::getExistingDirectory(this,"Caption","",
QFileDialog::ShowDirsOnly);
Я хочу, чтобы пользователь мог выбрать ВСЕ папки, однако C: / Windows / System32 / spool / не может быть найден с помощью QFileDialog, и я подозреваю, что могут быть и другие.
Я пытался установить флаг QFileDialog::HideNameFilterDetails
для просмотра скрытых файлов, однако, это не помогает.
Есть ли решение этой проблемы?
Это кажется проблемой, когда вы запускаете 32-битное приложение в 64-битной Windows. Вы должны увидеть папку спула, если скомпилируете свое приложение с собственным компилятором x64. В худшем случае вы можете написать простое 64-битное собственное приложение для отображения браузера папок и запустить 32-битное приложение и связаться с 64-битным приложением для получения результатов.
Я надеялся, что отключение Перенаправитель файловой системы WOW64 было бы достаточно, но это не помогло. В соответствии с этот ответ, это может работать, если вы используете Wow64DisableWow64FsRedirection
отключить перенаправление на всех потоках в процессе, но этот подход не рекомендуется даже тем, кто ответил на вопрос.
Вы не можете использовать эту статическую функцию, чтобы увидеть все папки. QFileDialog выполняет некоторую дополнительную фильтрацию за кулисами, и эта фильтрация не может быть отключена каким-либо очевидным способом с использованием статической функции getExistingDirectory.
Вы можете увидеть все папки, включая скрытые, по:
QFileDialog fd;
fd.setFilter(QDir::Hidden);
fd.setFileMode(QFileDialog::Directory);
fd.exec();
QString directory = fd.directory().path();