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放到主窗口里运行不可以吗