Как имитировать нажатие кнопки отмены для QFileDialog?

Как имитировать нажатие кнопки отмены для QFileDialog?

Поиск здесь не очень помогает, так как большинство потоков (например, этого) говорят об имитации нажатия клавиш для приложения QT, а не особенно для QFileDialog.

P.S.: Я хочу сделать это, потому что в настоящее время я использую библиотеку, созданную другими, код каким-то образом зависит от открытия QFileDialog. Становится очень раздражающим, если каждый раз требуется пересечение пользователя, вручную нажимая кнопку отмены.

Любая помощь приветствуется.


person herohuyongtao    schedule 27.04.2014    source источник
comment
Использует ли библиотека статические методы, такие как объекты QFileDialog::getOpenFileName или QFileDialog? Можете ли вы получить указатель QFileDialog? Можно ли изменить код библиотеки? Вы хотите отменить диалог сразу после его показа (или запретить его показ) или в любое время после показа?   -  person Pavel Strakhov    schedule 27.04.2014
comment
@PavelStrakhov Я могу получить указатель QFileDialog и иметь право изменить код библиотеки. Будет лучше, если я смогу отменить диалог в любой момент после показа. Спасибо.   -  person herohuyongtao    schedule 27.04.2014


Ответы (1)


Я предполагаю, что библиотека использует QFileDialog, как показано в документации:

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
QStringList fileNames;
if (dialog.exec()) {
  fileNames = dialog.selectedFiles();
}

В этом случае вы можете просто скрыть это. Это заставляет exec() немедленно возвращать QDialog::Rejected:

fileDialog->hide();
person Pavel Strakhov    schedule 27.04.2014
comment
Привет Павел, спасибо за быстрый ответ. Но у меня это не работает, диалоговое окно по-прежнему отображается без автоматического закрытия. Есть ли что-нибудь, связанное с диалоговым вызовом функции getSaveFileName()? - person herohuyongtao; 27.04.2014
comment
getSaveFileName — это статическая функция, которая использует собственный диалог файлов. Я даже не уверен, что объект QFileDialog создается при его использовании. По крайней мере, в Windows он блокирует цикл событий, поэтому я не могу ничего выполнить, пока диалог открыт. Я думаю, что невозможно что-то сделать с таким диалогом. Если вы можете изменить код, вы должны заменить все вызовы QFileDialog пользовательской оболочкой, которая будет вести себя так, как вы хотите. - person Pavel Strakhov; 28.04.2014