当前位置:编程学习 > wap >>

qt启动动画

想让程序主界面起来之前播放一个启动动画(gif格式的)。
我之前在网上找了一段代码,但是动画在主界面起来后才开始播放(主界面起来之前只显示一帧画面)
网上说这是因为还没有进入a.exec()之前,事件之类的不能用。请问还有没有别的方法可以解决这个问题
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 ();


qss_test w;
w.show();

//splash.finish(&w);
return a.exec();
}
Qt 动画 splash gif --------------------编程问答--------------------

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();
}
--------------------编程问答-------------------- 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;
       
        QDateTime pre = QDateTime::currentDateTime();
        QDateTime now;
        do
        {
              now = QDateTime::currentDateTime();
        } while (pre.secsTo(now) <= 5);//5为需要延时的秒数

w.show();

splash.finish(&w);
return a.exec();
}

--------------------编程问答-------------------- 实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口 --------------------编程问答-------------------- 你程序启动之前,要先sleep才能看到效果

我学习QT的一本书《Linux窗口程序设计—Qt4精彩实例分析》

第三章 第23个实例  有例子源码,很简单的,你一看就懂

你可以百度下载电子版的书来获取源码 --------------------编程问答--------------------
引用 4 楼 heksn 的回复:
实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口


比较常用的好办法 --------------------编程问答-------------------- 在你的Splash中,用QImageReader读取GIF,设置成背景, 没过一点时候就换下一张就行了
read (), bool jumpToNextImage () --------------------编程问答-------------------- LZ 你好,我是5楼,几天前看了,以为jpg和gif是一样的。
今天自己也想做类似的效果发现才不一样,网上找到的很多都是只能显示第一帧什么的。

http://blog.csdn.net/holymaple/article/details/8931454

LZ我写了一个可以用的例子,你看看能不能满足你的要求 --------------------编程问答--------------------
引用 4 楼 heksn 的回复:
实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口

这样临时窗口和主窗口一起出来了,延迟也不好使,你能给个例程参考下吗 --------------------编程问答-------------------- 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,