Доступ к родному QFileDialog

Я пишу тест пользовательского интерфейса для приложения Qt. Теперь это приложение вызывает QFileDialog, который должен быть автоматически заполнен и зафиксирован.

У меня уже есть QTimer, который работает даже при отображении модального диалога. Этот подход работает для многих диалогов, например. QMessageBox или QColorDialog.

Проблема в том, что QFileDialog является родным диалогом. Поэтому я не могу найти виджет диалога, потому что его нет.

Есть ли способ получить доступ к собственному диалогу.

Я разрабатываю Ubuntu, поэтому я думаю, что это диалог GTK. Тесты всегда будут выполняться на Ubuntu.


person Thomas Klier    schedule 11.06.2015    source источник
comment
Я бы усомнился в тесте здесь. Вы явно не хотите проверять функциональность собственного диалогового окна, но хотите ли правильно обрабатывать полученный путь. Не будет ли здесь лучше работать функция-заглушка, а не вызов родного диалогового окна?   -  person TheDarkKnight    schedule 11.06.2015
comment
Диалог поднимается в середине функции. Обойти диалог означало бы переписать эту функцию. Может быть, это лучший способ.   -  person Thomas Klier    schedule 11.06.2015
comment
Предположим, файл является документом для текстового редактора. Если ваша функция напрямую вызывает диалоговое окно собственного файла, вы ограничены получением файла с локального компьютера или из сети. Вводится требование поддерживать элементы в базе данных или даже в облаке. Ваша функция действительно должна вызывать другую, которая может решить, какой механизм использовать для извлечения данных. Затем эта новая функция будет либо вызывать собственный диалог, либо обращаться к базе данных, либо к местоположению в облаке. Ваш тест исходной функции теперь жизнеспособен.   -  person TheDarkKnight    schedule 11.06.2015
comment
TheDarkNight: Если это модульный тест, я согласен, но если это тест пользовательского интерфейса (как в Squish), для меня это допустимый случай.   -  person Frank Osterfeld    schedule 11.06.2015


Ответы (1)


В зависимости от ваших потребностей вы можете просто установить QFileDialog::DontUseNativeDialog в true, используя void QFileDialog::setOption(Option option, bool on = true), прежде чем показывать диалоговое окно. Тогда у вас должен быть виджет для поиска.

См.: http://doc.qt.io/qt-5/qfiledialog.html#setOption

person acj    schedule 11.06.2015
comment
Как говорит @acj, вы можете указать Qt не использовать собственные диалоги, поэтому, если это работает для вашего случая... Настройка QFileDialog::DontUseNativeDialog - это один из способов, создание диалога самостоятельно как экземпляр класса QFileDialog – это другое. (Только статические функции будут использовать собственные диалоги.) Вы упомянули, что ваш существующий метод работает для QColorDialog, но вы должны быть осторожны: QColorDialog и QFontDialog также будут использовать собственные виджеты на некоторых платформах. Эти классы имеют свои собственные соответствующие переопределения ::DontUseNativeDialogs. - person FeRD; 17.03.2018
comment
(Пропустил мое окно редактирования, но я имел в виду как собственные диалоги (не собственные виджеты), так и ::DontUseNativeDialog (без множественного числа) в этом предыдущем комментарии.) - person FeRD; 18.03.2018