gpt4 book ai didi

c++ - Qt - 创建主窗口之前的非模态对话框

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:00 24 4
gpt4 key购买 nike

我一直在努力做到这一点:我想在创建 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();
}

这是我到目前为止尝试过的:

  • 我尝试在构造 MainWindow 时创建并显示 StartUpDialog,但没有成功。
  • 使用 start.show(),但它不会在主窗口显示之前显示,对于 QWidget 和 QDialog 都是如此。
  • 使用 start.exec(),这是我想要的,但它是模态的,我无法使用 SetModal(false) 或 setWindowModality(Qt:NonModal) 使其成为非模态。
  • 我还尝试使用 start.exec() 并尝试重新实现 accepted() 和 exec() 以便它在出现时自动调用 accepted() 但它仍会关闭窗口。

希望你能帮助我解决这个问题,感谢阅读!

更新:感谢 Trap,我是这样解决的:

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,显然必须手动更新它。

最佳答案

如果我正确理解您的问题(在创建主窗口之前显示对话框),您应该查看 QSplashScreen 类:http://doc.qt.io/qt-5/qsplashscreen.html

关于c++ - Qt - 创建主窗口之前的非模态对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49339411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com