我現在使用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使用本地Windows文件打開對話框?
爲什麼主應用程序關閉時,對話框打開?你不能阻止嗎? – drescherjm
不,有一個單獨的線程正在運行,可能會引發錯誤。在這種情況下,應用程序被關閉並且所有小部件都被銷燬。這工作正常(所有適當的析構函數等都被調用),除了仍在運行的getOpenFileName。 –
你有分配給家長嗎? - 不妨發佈你的代碼來調用對話框,以防萬一有什麼明顯的變化 –