Я пытаюсь просто сохранить файл. Однако мне нужно имя файла, вводимое без суффикса для автоматического получения суффикса по умолчанию (который setDefaultSuffix () делает).
Я не полностью потерял бы собственное диалоговое окно сохранения только для этого. должностное лицо () не перегружается от QDialog, таким образом, он полностью обходит собственный рычаг (игнорирующий опцию DontUseNativeDialog, даже если это - ложь).
Если бы я отключаю предупреждение перезаписи файла и добавляю суффикс по умолчанию сам после функциональных возвратов, то я вновь открыл бы диалоговое окно, если бы пользователь не хотел перезаписывать..., и это просто ужасно.
Есть ли некоторый сигнал, я могу поймать и быстро ввести суффикс по умолчанию, если это не там? Я предполагаю не, так как это - собственное диалоговое окно.
Есть ли что-то, что я делаю неправильно с фильтром? У меня только есть один выбор фильтра. Это должно использовать то расширение.
Это кажется довольно хромым. Запуск диалогового окна сохранения и просто ввод "теста" никогда не должны приводить к файлу без расширения. "тест"., да. не "протестируйте" путь. Это действительно смутит пользователей, когда они поразят Загрузку и не видят файл, они просто сохранили.
Я предполагаю, что межплатформенная часть QT дает мне диалоговую функциональность файла наименьшего общего знаменателя?
Да, если вы посмотрите исходный код Qt, очевидно, что только статические функции используют собственные файловые диалоги . К сожалению, невозможно получить собственные диалоговые окна каким-либо другим способом ...
Вы пробовали использовать параметры фильтра в статических функциях? [Edit: Упс, заметил, что у вас уже есть.]
Я просто пробовал это сам, например, и все кажется довольно разумным:
QString filter = "Text files (*.txt)";
QString selectedFilter;
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter);
Ввод test в диалоговом окне сохранения возвращает ] test.txt .
Вход в тест . в диалоговом окне сохранения возвращает test..txt .
Ввод test.foo в диалоговом окне сохранения возвращает test.foo .
Все они показывают соответствующий диалог перезаписи, если уже существует файл с таким именем.
Единственный способ получить test без каких-либо суффиксов - это заключить его в кавычки ( "test" ) или сначала ввести *. * (что заставит его отображать все файлы), а затем ввести тест . (Хотя одна странность в том, что selectedFilter
по-прежнему будет содержать фильтр, показанный в диалоговом окне, даже если он не используется).