qt启动动画
想让程序主界面起来之前播放一个启动动画(gif格式的)。我之前在网上找了一段代码,但是动画在主界面起来后才开始播放(主界面起来之前只显示一帧画面)
网上说这是因为还没有进入a.exec()之前,事件之类的不能用。请问还有没有别的方法可以解决这个问题
int main(int argc, char *argv[])Qt 动画 splash gif --------------------编程问答--------------------
{
QApplication a(argc, argv);
QSplashScreen splash(QPixmap(":/skin/default/splash.gif"));
QLabel lbl(&splash);
QMovie mv(":/skin/default/splash.gif");
lbl.setMovie (&mv);
mv.start ();
splash.show ();
qss_test w;
w.show();
//splash.finish(&w);
return a.exec();
}
--------------------编程问答-------------------- a.processEvents();这个我试过是一样的 --------------------编程问答--------------------
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen splash(QPixmap(":/skin/default/splash.gif"));
QLabel lbl(&splash);
QMovie mv(":/skin/default/splash.gif");
lbl.setMovie (&mv);
mv.start ();
splash.show ();
a.processEvents();
qss_test w;
w.show();
splash.finish(&w);
return a.exec();
}
--------------------编程问答-------------------- 实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口 --------------------编程问答-------------------- 你程序启动之前,要先sleep才能看到效果
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen splash(QPixmap(":/skin/default/splash.gif"));
QLabel lbl(&splash);
QMovie mv(":/skin/default/splash.gif");
lbl.setMovie (&mv);
mv.start ();
splash.show ();
a.processEvents();
qss_test w;
QDateTime pre = QDateTime::currentDateTime();
QDateTime now;
do
{
now = QDateTime::currentDateTime();
} while (pre.secsTo(now) <= 5);//5为需要延时的秒数
w.show();
splash.finish(&w);
return a.exec();
}
我学习QT的一本书《Linux窗口程序设计—Qt4精彩实例分析》
第三章 第23个实例 有例子源码,很简单的,你一看就懂
你可以百度下载电子版的书来获取源码 --------------------编程问答--------------------
比较常用的好办法 --------------------编程问答-------------------- 在你的Splash中,用QImageReader读取GIF,设置成背景, 没过一点时候就换下一张就行了
read (), bool jumpToNextImage () --------------------编程问答-------------------- LZ 你好,我是5楼,几天前看了,以为jpg和gif是一样的。
今天自己也想做类似的效果发现才不一样,网上找到的很多都是只能显示第一帧什么的。
http://blog.csdn.net/holymaple/article/details/8931454
LZ我写了一个可以用的例子,你看看能不能满足你的要求 --------------------编程问答--------------------
这样临时窗口和主窗口一起出来了,延迟也不好使,你能给个例程参考下吗 --------------------编程问答-------------------- int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents();
...
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
}
楼主的这个用法是对的,但是只能显示一幅图片,楼主想显示gif动态图片需要:
gif图片可以分为静态图片和动态图片,但无论是那种图片都可以通过以下两种方式显示
需要利用QMovie+QLabel,代码如下:
movie = new QMovie("./images/bkg.gif");//这个资源不用写到source.qrc中,只要路径对了就行,还有就是movie最好是new的
不然如果是写到一个方法里面的话movie可以被销毁从而导致gif无法显示
label->setMovie(movie);
qDebug()<<"..rrrr.."<<movie->isValid();//测试是否加在成功
movie->start();
2.还可以使用定时器的方式显示图片,在定时器回调里面,加载不同的图片,来达到动态显示图片的目的
补充:移动开发 , Qt