Qt中启动界面的设计

来源:互联网 发布:js删除一个div内容 编辑:程序博客网 时间:2024/04/28 11:43

        越来越发现Qt的功能十分强大,真的是越来越喜欢它了。对于比较大的项目来说,程序启动的时候需要加载很多的模块和初始化操作,有时候可能需要很长时间,这样一来,对于用户来说可能就会有点等不及,感到不好,程序怎么起了这么长的时间。为此,很多的大型程序都做了启动界面来掩盖模块的加载。

          说起启动界面的加载,主要有三种:静态图片,动态图片(gif),动画(swf)。下面就这几种做一个简单的学习。

一、静态图片的加载

       静态图片的加载对于第一次学习这个来说也是非常简单的一个,基本思想就是现实一张图片,然后延时,给人的感觉就像是出现了启动界面。由于图片不好截图,就直接上代码了。

<strong>    QSplashScreen splash(QPixmap(":/images/splash.png"));    splash.setDisabled(true);//进制用户的输入事件相应    splash.show();    a.processEvents();    splash.showMessage(QObject::tr("数据正在加载中……"),Qt::AlignLeft |Qt::AlignBottom,Qt::black);    for(int i = 0;i<200;i++)    {    }    splash.finish(mainwow);    a.exec();</strong>
        QsplanshScreen类是Qt自带的,需要添加头文件。此时需要将自己准备好的图片添加到资源文件里面,我的这里资源名称是images,关于建立资源文件,很简单,主需要点击“文件”----“新建文件或工程”----“Qt资源文件”,然后给个名字,将自己的图片添加到里面就行了。这里就不过多的说了。

        Qt::AlignBottom,Qt::black  是现实一段提示信息,提醒用户程序正在加载中,可以设置它的字体,颜色和大小等信息。

二、动态图片的加载

        首先就要准备一张动态图片了,可以自己制作,也可以下载。可以在线制作的,这个最简单了,制作一张自己喜欢的。

 

<strong><span style="font-size:18px;">    QMovie *move = new QMovie(":/images/splash.gif");    QLabel *label = new QLabel("",0);    label->setGeometry(510,300,450,100);    label->setMovie(move);    move->start();    label->setWindowFlags(Qt::FramelessWindowHint);//隐藏边框    label->show();    QTime t;    t.start();    while(t.elapsed() < 2000)    {        a.processEvents();    }</span></strong>
展示我的一张开始界面,由于截图只能是静态的,我的启动时时动态的。

我的界面显示的是一张动态图片,自己制作的,就简单的做个一个。代码应该很容易看懂,就不做过多的解释。

三、动画的加载

动画的加载相对来说有点难度,需要插件,其实 也就是Qt库中的QAxWidget类还是直接上代码

<strong><span style="font-size:18px;">     QAxWidget *flash = new QAxWidget(0,0);      //QAxWidget使用的是ActiveX插件     flash->resize(600,600);                    //设置该控件的初始大小     flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}")); //设定控制器     flash->dynamicCall("LoadMovie(long,string)",0,":images/flash1.swf");   //     flash->setWindowFlags(Qt::FramelessWindowHint);   //去除边框     flash.show();     QTime t;     t.start();     while(t.elapsed()<5000)     {         QApplication::processEvents();     }     flash.close();</span></strong>

代码看起来很清晰易懂。不用做过多的解释。


2 0
原创粉丝点击