Что я хочу сделать: просто попросите пользователя выбрать каталог в пользовательском интерфейсе Qt.
Код на данный момент:
QString dir = QFileDialog::getExistingDirectory(this, "Open directory",
QString::fromStdString(target_dir),
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
Это прекрасно работает под Linux.Однако, когда я кросс-компилирую его для Windows, происходит то, что вместо some_path/directory
возвращается some_path/directory/directory
, то есть имя выбранного каталога добавляется дважды.
Работает нормально, если я выбираюпапка и происходит только при входе в папку, что должен делать пользователь.
Причиной этого может быть то, что строка edit, которая в QFileDialog обычно содержит имя файла, здесь содержитимя папки и не очищает себя, когда папка вводится (что она делает под linux).
Теперь я мог бы написать некоторую подпрограмму, которая для данного QString dir
проверяет, существует ли она, и если нет, и если последнийдве папки идентичны и пробует без последней папки.Это моё временное решение, но мне оно не нравится, я бы предпочел, чтобы я мог решить это внутри частей кода Qt.
По соображениям совместимости я должен использовать Qt 4.8.5.
Ничего не найдено по этому вопросу с помощью поисковых систем.
Кто-нибудь знает способ заставить эту работу?В конце концов, это должна быть очень элементарная и простая функция Qt.
Редактировать: Учитывая рекомендации от paolo, я попытался удалить флаги, у меня была та же проблема.Затем я также проверил это без статической функции:
QFileDialog dialog;
dialog.setFileMode(QFileDialog::Directory);
QString dir = dialog.getExistingDirectory(this);
Все та же проблема.
Редактировать: Мое временное решение, для тех, кто заинтересован:
QString find_next_valid_folder(const QString& path)
{
if(QDir(path).exists()) return path;
return find_next_valid_folder(path.left(path.lastIndexOf("/")));
}