У меня есть оконное приложение, которое разбивается после отображения диалогового окна информации только до активации QMainWindow.Показать диалоговое окно перед основным окном
Диалог информации отображается только в том случае, если переданные данные недействительны, однако это может быть взаимодействие с пользователем (выбор/перетаскивание файла) или передача в качестве аргумента, что вызывает проблемы. Когда/как я должен показывать такой диалог ошибок, чем?
Примечание: Когда диалог отображается только (с помощью метода show(), а не exec()), он не сбой, но диалог сразу же отбрасывается даже с помощью setModal (true).
Любые идеи? Спасибо,
EDIT:
Некоторый код:
int WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
{
QApplication app(__argc, __argv);
MBViewer viewer;
viewer.show();
return app.exec();
}
MBViewer::MBViewer()
{
setAcceptDrops(true);
m_ui.setupUi(this);
m_viewer = new Viewer_Widget();
m_ui.preview_layout->addWidget(m_viewer);
parse_parameters();
connect_controls();
connect_actions();
}
void MBViewer::connect_controls()
{
(...)
connect(m_viewer, SIGNAL(view_initialized()), this, SLOT(open_file()));
(...)
}
void MBViewer::open_file()
{
// somefile is set in parse_parameters or by user interaction
if (!somefile.is_valid()) {
m_viewer->reset();
// This will crash application after user clicked OK button
QMessageBox::information(this, "Error", "Error text", QMessageBox::Ok);
return;
}
(...)
}
Пожалуйста, разместите самодостаточный компилируемый пример, который воспроизводит проблему ... –
'show()' является асинхронным (вызов немедленно возвращается) и 'exec()' является синхронным (вызов ждет, когда диалог будет закрыт). Может быть, это помогает? – leemes