qt启动动画

longshaooo7 2013-05-07 03:28:12
想让程序主界面起来之前播放一个启动动画(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();
}
...全文
731 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
RabinSong 2013-11-04
  • 打赏
  • 举报
回复
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.还可以使用定时器的方式显示图片,在定时器回调里面,加载不同的图片,来达到动态显示图片的目的
我鲁班无敌 2013-11-04
  • 打赏
  • 举报
回复
引用 4 楼 heksn 的回复:
实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口
这样临时窗口和主窗口一起出来了,延迟也不好使,你能给个例程参考下吗
holymaple 2013-05-15
  • 打赏
  • 举报
回复
LZ 你好,我是5楼,几天前看了,以为jpg和gif是一样的。 今天自己也想做类似的效果发现才不一样,网上找到的很多都是只能显示第一帧什么的。 http://blog.csdn.net/holymaple/article/details/8931454 LZ我写了一个可以用的例子,你看看能不能满足你的要求
仙人的板板 2013-05-10
  • 打赏
  • 举报
回复
在你的Splash中,用QImageReader读取GIF,设置成背景, 没过一点时候就换下一张就行了 read (), bool jumpToNextImage ()
holymaple 2013-05-10
  • 打赏
  • 举报
回复
你程序启动之前,要先sleep才能看到效果 我学习QT的一本书《Linux窗口程序设计—Qt4精彩实例分析》 第三章 第23个实例 有例子源码,很简单的,你一看就懂 你可以百度下载电子版的书来获取源码
lkldiy 2013-05-10
  • 打赏
  • 举报
回复
引用 4 楼 heksn 的回复:
实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口
比较常用的好办法
  • 打赏
  • 举报
回复
实在不成,就先弹出一个显示gif的窗口,然后设置定时器,在一定时间后隐藏该窗口显示主窗口
xcyl 2013-05-07
  • 打赏
  • 举报
回复


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();
}

longshaooo7 2013-05-07
  • 打赏
  • 举报
回复
a.processEvents();这个我试过是一样的
xcyl 2013-05-07
  • 打赏
  • 举报
回复

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();
}

16,175

社区成员

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

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