Qt QFileDialog - родные диалоги только со статическими функциями? - PullRequest
7 голосов
/ 09 апреля 2010

Я пытаюсь просто сохранить файл. Однако мне нужно, чтобы имя файла вводилось без суффикса, чтобы автоматически получить суффикс по умолчанию (что делает setDefaultSuffix ()).

Я бы предпочел не полностью потерять родной диалог сохранения только для этого. exec () не перегружен из QDialog, поэтому он полностью обходит нативный хук (игнорируя опцию DontUseNativeDialog, даже если она ложна).

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

Есть ли какой-нибудь сигнал, который я могу поймать и быстро ввести суффикс по умолчанию, если его там нет? Наверное, нет, так как это родной диалог.

Что-то не так с фильтром? У меня есть только один выбор фильтра. Следует использовать это расширение.

Это выглядит довольно отстойно. Запуск диалога сохранения и простой ввод «test» никогда не должны приводить к файлу без расширения. «тест», да. «проверить» никак. Это действительно смущает пользователей, когда они нажимают «Загрузить» и не видят только что сохраненный файл.

Я полагаю, что кроссплатформенная часть Qt дает мне функциональность диалога с файлом с наименьшим общим знаменателем?

Ответы [ 2 ]

5 голосов
/ 09 апреля 2010

Да, если вы посмотрите на исходный код Qt, очевидно, что только статические функции используют собственные диалоговые окна файлов.К сожалению, получить родные диалоги невозможно, к сожалению ...

0 голосов
/ 09 апреля 2010

Вы пробовали опции фильтра в статических функциях? [Изменить: Упс, заметил, что у вас уже есть.]

Я, например, сам попробовал это, и все кажется довольно разумным:

QString filter = "Text files (*.txt)";
QString selectedFilter;
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter);

Ввод test в диалоговом окне сохранения возвращает test.txt .
Ввод test. в диалоговом окне сохранения возвращает test..txt .
Ввод test.foo в диалоговом окне сохранения возвращает test.foo .

Все они показывают соответствующий диалог перезаписи, если уже существует файл с таким именем.

Единственный способ получить test без каких-либо суффиксов - заключить его в кавычки ( "test" ) или сначала ввести *. * (что заставит отображать все файлы), а затем введите test . (Хотя одна странность состоит в том, что selectedFilter все равно будет содержать фильтр, показанный в диалоговом окне, даже если он не используется).

...