Qt启动画面设置

[转载原文:]
(http://www.cnblogs.com/tgyf/p/3854695.html)
学习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,QPixmap。例子如下:

------------main.cpp-------------------
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312"));//设置本地编码
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312"));//设置字符串编码
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));
    QPixmap pixmap(".../images/Splash.PNG");
    QSplashScreen splash(pixmap);
    splash.show();

    QTime t;
    t.start();
    while(t.elapsed()<5000)
    {
        QApplication::processEvents();
    }

    MainWindow w;
    w.show();
    splash.finish(&w);
    return app.exec();
}
Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的GUI和媒体功能,使开发者能够快速创建各种应用程序。在Qt中,我们可以使用动态进度条和启动画面来增强用户体验。 动态进度条是一个可以显示任务进度的控件,它与任务的完成情况同步更新。我们可以使用Qt中的QProgressBar类来创建和管理动态进度条。在启动画面中,我们可以使用Qt中的QSplashScreen类来显示一个带有应用程序标识和加载信息的启动画面。 要创建动态进度条和启动画面,我们可以按照以下步骤进行: 1. 创建一个QSplashScreen实例,并设置启动画面的背景图片和显示文本。 2. 在应用程序主窗口的构造函数中,创建一个QProgressBar实例,并设置其初始值和范围。 3. 在任务执行过程中,使用QTimer类来模拟任务的进度,通过更新QProgressBar的value属性来更新进度条的显示。 4. 在任务完成后,关闭启动画面并显示应用程序主窗口。 下面是一个使用动态进度条和启动画面的示例代码: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QSplashScreen splash(QPixmap(":/splash_image.png")); QProgressBar progressBar; splash.showMessage("Loading...", Qt::AlignBottom|Qt::AlignHCenter, Qt::white); splash.show(); QTime waitTime = QTime::currentTime().addSecs(3); // 模拟加载过程 while (QTime::currentTime() < waitTime) { app.processEvents(); } progressBar.setRange(0, 100); progressBar.setValue(0); progressBar.setAlignment(Qt::AlignCenter); QMainWindow mainWindow; mainWindow.setCentralWidget(&progressBar); mainWindow.show(); QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&progressBar]() mutable { int value = progressBar.value() + 10; if (value <= progressBar.maximum()) { progressBar.setValue(value); } }); timer.start(500); splash.finish(&mainWindow); return app.exec(); } ``` 以上代码中,我们使用了一张启动画面图片,并设置了加载信息。然后,程序会在启动画面显示3秒钟,模拟加载过程。加载完成后,我们创建了应用程序的主窗口,并将QProgressBar设置为其中央部件。通过QTimer来定时更新进度条的值,最后关闭启动画面并显示主窗口。 使用动态进度条和启动画面可以给用户一个友好的界面提示,提升用户体验。在实际的应用程序中,我们可以根据具体需求来设计和实现更丰富和复杂的动态进度条和启动画面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值