Qt程序启动画面播放(gif与swf两种动画格式)

  学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少。

  比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找不到好的书籍或文章可以马上学习、上手。

  今天,就把前段时间对启动画面播放的学习及尝试做一个小小的总结。如果对大家有所帮助,那自然好;如果有什么不足或有什么可以改进的地方,还望朋友们多给点意见及建议,谢谢!

  过程很简单,只是建立了一个基于Qt控制台的项目,文件也只有一个——"main.cpp"。

  直接上代码,注意如果要播放Flash动画需要引入QAxWidget类,库文件有QAxContainer.lib,QAxServer.lib等。

 1 #include <QtGui>
 2 #include <QtGui/QApplication>
 3 #include <QTextCodec>
 4 #include <QWidget>
 5 #include <ActiveQt/QAxWidget>
 6 #include <QTime>
 7
 8 void gifplay(QLabel *label)
 9 {
10     label->show();
11 }
12
13 void gifclose(QLabel *label)
14 {
15     label->close();
16 }
17
18 void flashplay(QAxWidget *flash)
19 {
20     flash->show();
21 }
22
23 void flashclose(QAxWidget *flash)
24 {
25     flash->close();
26 }
27
28 int main(int argc, char *argv[])
29 {
30     QApplication a(argc, argv);
31
32     QTextCodec *codec = QTextCodec::codecForName("GB2312"); //文本为GB2312编码
33     QTextCodec::setCodecForLocale(codec);       //设置本地编码
34     QTextCodec::setCodecForCStrings(codec);     //设置字符串编码
35     QTextCodec::setCodecForTr(codec);
36
37     QAxWidget *flash = new QAxWidget(0,0);      //QAxWidget使用的是ActiveX插件
38     flash->resize(800,600);                    //设置该控件的初始大小
39     flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}")); //设定控制器
40     flash->dynamicCall("LoadMovie(long,string)",0,"D:\\flash1.swf");   //
41     flash->setWindowFlags(Qt::FramelessWindowHint);   //去除边框
42     flashplay(flash);
43     QTime t;
44     t.start();
45     while(t.elapsed()<5000)
46     {
47         QApplication::processEvents();
48     }
49     flashclose(flash);
50
51     /*
52     QMovie *movie;
53     movie = new QMovie("D:\\gif1.gif");
54     QLabel *label=new QLabel ("", 0);
55     label->setGeometry( 300, 300, 500, 500 );
56     label->setMovie(movie);
57     label->setScaledContents(true);
58     movie->start();
59     gifplay(label);
60     t.start();
61     while(t.elapsed()<5000)
62     {
63         QApplication::processEvents();
64     }
65     gifclose(label);
66     */
67
68     return a.exec();
69 }

  程序开头做了一些初始化工作,这里就不解释了,有兴趣的朋友可以细细研究下。

  关键的代码分为两段,前一段是针对Flash动画".swf";后一段注释的是针对".gif"。

  先看第一段,从37行开始,分别为声明QAxWidget类指针,设置播放画面大小及控制类别,然后导入需要播放的文件,最好是绝对路径。语句flash->setWindowFlags(Qt::FramelessWindowHint);作用是去除播放时的边框,因为我的目的是播放程序启动画面,去除边框会美观一点,而且其会自动关闭,不需要关闭等按钮。

  分别给动画播放和关闭定义了独立方法,虽然也可以直接在主函数中播放和关闭,但为了体现封装思想以及方面日后添加新功能,还是方法的形式比较易用。

  关键的是接下来时间设置的部分,因为动画在Qt控件中播放不会自动关闭,而且,若是简单地设置等待多少时间然后关闭动画,那么程序在等待的过程中,动画也不会正常播放,这也是原先头疼及花时间最多的地方。

  用到了QTime类,开始计时之后,通过elapsed()函数获取走过时间,若是没到设定时长,就继续原先进程,即继续播放动画,例子中设定的是5000毫秒。

1 QTime t;
2 t.start();
3 while(t.elapsed()<5000)
4 {
5     QApplication::processEvents();
6 }

  到此,Flash的".swf"动画播放及自动关闭功能就实现了,是不是很简单。

  注释掉的那一段是播放".gif"动画的,原理及实现方式类似,只是播放控件不同,用了最常规的QLabel。

  这个例子是经过反复测试的,能成功运行并达到理想效果,用的工具是VS2008+Qt4.8.6。

  在实际项目中,有些主界面打开会需要花点时间,为了不让用户有等待的感觉,可以将一小段动画加在启动时段,所以对这方面的学习还是值得与有应用场景的

  至于静态图像作为启动画面,就更简单了,Qt也有一个很好用的类——QSplashScreen。网上的例子很多,这里就不描述了,例子中也没加入该功能。

Qt程序启动画面播放(gif与swf两种动画格式)

时间: 2024-08-11 09:57:35

Qt程序启动画面播放(gif与swf两种动画格式)的相关文章

QSplashScreen类实现Qt程序启动画面

QSplashScreen类实现Qt程序启动画面 收藏人:zwsj     2013-09-13 | 阅:569  转:6    |   来源   |  分享      程序启动画面一般用于显示软件信息(名称.作者.版权等)以及减少程序加载过程中的枯燥感. 在Qt中,可以通过QSplashScreen类来为应用程序添加一个启动画面,它会在应用程序的主窗口出现前显示一个图片,并且可以在图片上显示想要输出的信息. 下面是一个简单的例子: [cpp] view plaincopy #include <

qt程序启动播放动画

qt程序启动播放动画 编辑删除转载 2016-01-20 10:23:11 标签:qt启动动画 1.播放动画 1 QAxWidget *flash = new QAxWidget(0, 0); //QAxWidget使用的是ActiveX插件 2 3 flash->resize(800, 600); //设置该控件的初始大小 4 5 flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}&

PyQt5开发小记,如何实现程序启动画面和退出提示?

程序启动画面: if __name__ == "__main__": ui_style = UIStyle().get_style() app = QtWidgets.QApplication(sys.argv) # 创建QSplashScreen对象实例 splash = QtWidgets.QSplashScreen(QtGui.QPixmap("UserView/logo.png")) # 设置画面中的文字的字体 splash.setFont(QFont('M

Android程序启动画面 Splash

很多应用都会有一个启动界面.欢迎画面慢慢隐现,然后慢慢消隐. 我的方式是使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一张Activity. splash.java package com.yuyidong.second; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import andro

用VC制作应用程序启动画面

摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢?本文提供四种方法.前三种适用于基于文档的应用程序,第四种适用于基于对话框的应用程 序. 1.利用组件库中的Splash Screen组件实现 (1)用Photoshop等制作启动画面图像,保存为bmp格式. (2)用Appwizard建一个基于单文档的工程Splash. (3)在资源中插入位图资源

qt qsplashscreen 启动画面 延时

intdelayTime=3;QElapsedTimer timer;timer.start();while(timer.elapsed()<(delayTime*1000)){app.processEvents();}qt qsplashscreen 启动画面 延时,码迷,mamicode.com

t5 杂谈(二)Qt5:Qt中启动画面的设置

t5 杂谈(二)Qt5:Qt中启动画面的设置 [复制链接] 上一主题下一主题 离线 艺术人生 加关注 艺 术 人 生 - 本帖被 XChinux 执行加亮操作(2016-04-23) - #include "mainwindow.h"#include <QApplication>#include <QSplashScreen>#include <QTextEdit>#include <QPixmap>#include <QTest&

MFC之窗体改动工具栏编程状态栏编程程序启动画面

1窗体外观的改动 (1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 改动标题:cs.style&=FWS_ADDTOTITLE; cs.lpszNamw="new title"; (2)窗体创建之后改动外观 在CMainframe::Create()中调用SetWindowLong(HWND hwnd,.....)依据參数改动指定的项 全部从CWnd派生的类都是窗体类在这些窗体类中都有一个公有的成员变量保存了和着个窗

MFC之窗口修改工具栏编程状态栏编程程序启动画面

1窗口外观的修改 (1)修改在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 修改标题:cs.style&=FWS_ADDTOTITLE; cs.lpszNamw="new title"; (2)窗口创建之后修改外观 在CMainframe::Create()中调用SetWindowLong(HWND hwnd,.....)根据参数修改指定的项 所有从CWnd派生的类都是窗口类在这些窗口类中都有一个公有的成员变量保存了和着个窗