我一直在努力做到这一点:我想在创建MainWindow之前在窗口上显示QWidget或QDialog,但我不能使用exec(),因为它将进入其循环并且不会创建我的MainWindow在我接受或拒绝对话之前。
我想要这样做的原因是在MainWindow构建自己时让一个小部件显示信息。一旦MainWindow出现,我不想保留这个额外的窗口。
我认为问题来自这样一个事实:当a.exec()被调用时,主窗口已经被创建,并且窗口不会在a.exec()之前显示。我找到的解决方案是使用QDialog而不是调用exec(),但它会阻止我不希望发生的其余代码。
代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StartUpDialog start; //this is my custom QDialog, can be a QWidget if necessary.
qDebug() << "starting up!";
MainWindow w;
start.exec(); //I tried show() but it won't show up.
w.startApp(&start); //this function will do some stuff.
w.show();
//I don't want start to stay after mainwindow shows up
return a.exec();
}
这是我到目前为止所尝试的内容:
希望你能在这个问题上帮助我,谢谢阅读!
更新:解决了陷阱,我就是这样做的:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StartUpDialog start;
QSplashScreen *splash = new QSplashScreen();
StartUpWidget *start = new StartUpWidget(splash);
splash->resize(350,380);
start->show();
splash->raise();
splash->show();
qDebug() << "starting up!";
MainWindow w;
w.startApp(start);
w.show();
splash->finish(&w);
start->deleteLater();
splash->deleteLater();
return a.exec();
}
我唯一关心的是我使用QMovie在我的小部件中使用Gif,并且必须手动完成更新。
答案 0 :(得分:2)
如果我正确理解您的问题(在创建主窗口之前显示对话框),您应该查看QSplashScreen类:http://doc.qt.io/qt-5/qsplashscreen.html