关于两个对话框不能同时显示的问题

加盾男爵 2017-11-10 10:40:51
现在有两个对话框,A和B,其中B是一个比较大的对话框,启动大约需要3-5秒钟,而对话框A显示GIF图片,用于在启动B时显示一张转圈的图片,代码类似这样


if(A != NULL)
delete A;
A = new load_Dialog(this);
A->show();
A->rasie();
A->activeWindow(); //先显示一个转圈
B = new longTime_Dialog(this); //这一句需要花费3-5秒钟
B->exec();
delete A;


我的期望是对话框A显示后,然后生成B(生成B需要花费3-5秒钟),等B生成后exec() B,然后B完成功能关闭后把A也delete\

现在的问题是A没法显示,程序运行3-5秒后直接显示B,如果当把上面
A->show();
A->rasie();
A->activeWindow();

这三句换成了A->exec()时候,程序运行时先出现A,手动关闭后等待3-5秒后出现B,

我想问下如何先显示A,然后生成B在显示B
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码运输员 2017-11-10
  • 打赏
  • 举报
回复
qDebug() << QDateTime::currentDateTime().toString("mm:ss-z"); A a; a.show(); a.activateWindow(); qDebug() << QDateTime::currentDateTime().toString("mm:ss-z"); QThread::msleep(1); B b; qDebug() << QDateTime::currentDateTime().toString("mm:ss-z"); a.close(); b.exec(); qDebug() << QDateTime::currentDateTime().toString("mm:ss-z");
代码运输员 2017-11-10
  • 打赏
  • 举报
回复
应该是b->exec(),这是个线程挂起的操作,等到b关闭后,才执行下一步的,如果b不关闭就一直停在那里了
加盾男爵 2017-11-10
  • 打赏
  • 举报
回复
引用 1 楼 only_1 的回复:
应该是代码运行到创建A后把任务交给系统了,不停直接执行了创建B窗口,然后A和B几乎同时显示的.你打印下时间看看流程是怎么回事
if(A != NULL)
    delete A;
qDebug() << QTime::currentTime().toString(tr("hh-mm-ss-zzz"));
A = new load_Dialog(this);
A->show();
A->rasie();
A->activeWindow();  //先显示一个转圈
qDebug() << QTime::currentTime().toString(tr("hh-mm-ss-zzz"));
B = new longTime_Dialog(this);  //这一句需要花费3-5秒钟
B->exec();
qDebug() << QTime::currentTime().toString(tr("hh-mm-ss-zzz"));
delete A;
输出的结果是 16-34-11-223; 16-34-11-601; 16-34-14-829; A->show()到B->exec(0话了3秒多,这段时间就是产生B的时间,但问题是A并不在这段时间内显示 我也有想过用QSplashScreen类来替代A对话框,但我找不到QSplashScreen显示动态GIF图片的方法
代码运输员 2017-11-10
  • 打赏
  • 举报
回复
应该是代码运行到创建A后把任务交给系统了,不停直接执行了创建B窗口,然后A和B几乎同时显示的.你打印下时间看看流程是怎么回事

16,202

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧