当前位置: 代码迷 >> QT开发 >> 主函数中两个不相关的窗口先后显示的有关问题
  详细解决方案

主函数中两个不相关的窗口先后显示的有关问题

热度:34   发布时间:2016-04-25 03:40:26.0
主函数中两个不相关的窗口先后显示的问题
int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QMovieTest qMovieTest;
QTimer timer;
QObject::connect(&timer, SIGNAL(timeout()), &qMovieTest, SLOT(accept()));
timer.start(4000);
qMovieTest.exec();

        ...//两个窗口之间还有其他的代码

QssPrototype prototypeTest;
prototypeTest.show();

return app.exec();
}

代码如上。 代码实现了两个窗口的先后显示。但是代码在运行到qMovieTest.exec();这一句时会等待4秒钟后才运行到下一句。但是两个窗口代码之间还有其他的一些代码,或者一些东西的初始化之内的。所以我希望的是第一个窗口显示出来后能继续运行到后面的代码,而不至于在exec处进行事件循环浪费时间。
我试过,一般的窗口如果调用show()的话,只能在app.exec()处才能显示出界面,而调用exec虽然能显示界面但是又陷入了事件循环而浪费了时间。我看过QSplashScreen的例子,它是可以在调用show()时显示图片的,因为它重写了repaint函数,里面绘制了QPixmap.但是QSplashScreen是显示图片的,而我上面代码中的QMovieTest中是放置了QMovie的。我之前在网上搜索之后添加过这样一句:qMovieTest.show();    app.processEvents();但是这个只能绘制QMovie中的gif文件的第一帧,不能显示动画效果,就只是一个图片出来了。哎,没思路了。不知道大家有没有什么好的建议。
动画 界面 图片 窗口先后显示

------解决方案--------------------
//尝试

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QssPrototype prototypeTest;

    QMovieTest *test = new QMovieTest();
    test->show();
    
    QTimer::singleShot(500, &prototypeTest, SLOT(Initialize()));
     
    return app.exec();
}

//关键初始化均在Initialize中, 完成后隐藏、删除QMovieTest, 上面没有体现.
void QssPrototype::Initialize()
{
  ......
  showMaximized();
}

------解决方案--------------------
把QMovieTest放到主窗口里运行不可以吗
  相关解决方案