Я использую QFileDialog::getOpenFileName прямо сейчас. Однако, как предложено в this article, это приводит к сбоям, когда основное приложение закрывается, когда диалог открыт. Вы можете увидеть пример того, как воспроизвести аварии здесь:Запустить QFileDialog :: getOpenFileName без отдельного цикла событий?
int main(int argc, char **argv) {
QApplication application{argc, argv};
QMainWindow *main_window = new QMainWindow();
main_window->show();
QPushButton *button = new QPushButton("Press me");
main_window->setCentralWidget(button);
QObject::connect(button, &QPushButton::clicked, [main_window]() {
QTimer::singleShot(2000, [main_window]() { delete main_window; });
QFileDialog::getOpenFileName(main_window, "Close me fast or I will crash!");
});
application.exec();
return 0;
}
я могу использовать QFileDialog
с обычным конструктором вместо этого, как описано here. Однако, похоже, я не открываю диалоговое окно с открытым окном.
Есть ли способ получить программу без сбоев и использовать открытый диалог открытия файла Windows через Qt?
Почему основное приложение закрывается, когда диалог открыт? Вы не можете это предотвратить? – drescherjm
Нет, есть отдельный поток, который может потенциально вызвать ошибку. В этом случае приложение закрывается и все виджеты уничтожаются. Это работает отлично (все надлежащие деструкторы и т. Д. Называются), за исключением все еще запущенного getOpenFileName. –
Вы назначили родителя? - может также опубликовать свой код для вызова диалога, в случае чего-нибудь очевидного –