程序启动时比较枯燥,同时为了增加程序趣味,考虑做一个启动画面。

在Qt中实现启动界面,主要就是使用QSplashScreen类。关于QSplashScreen类的使用问题,主要参考

http://blog.csdn.net/chenlong12580/article/details/23713025

http://blog.csdn.net/andy_93/article/details/52700697

然而此博客仅仅介绍了如何封装QSplashScreen类,并为介绍怎么使用,而我仅仅是一个QT新手,在使用过程中遇到一些问题,特此记录

首先是头文件SplashScreenMng.h的封装,实现如下

 1 #ifndef SPLASHSCREENMNG_H
 2 #define SPLASHSCREENMNG_H
 3
 4 class QMutex;
 5 class QSplashScreen;
 6 class QString;
 7
 8 class CSplashScreenMng
 9 {
10 public:
11     /**
12      * 函数功能:获取CSplashScreenMng的唯一对象指针
13      * 返回值: CSplashScreenMng对象指针
14      */
15     static CSplashScreenMng* getInstance();
16
17     /**
18      * 函数功能:获取QSplashScreen指针对象并显示
19      * 参数:  fileName [in] QSplashScreen显示的图片文件
20      * 返回值:QSplashScreen对象指针
21      */
22     QSplashScreen* showSplash(const QString &fileName);
23
24     /**
25      *  函数功能:设置QSplashScreen对象的内容
26      *  参数: text [in] 需要显示的内容
27      */
28     void setSplashStatus(const QString &text);
29
30     //销毁QSplashScreen对象
31     void destroySplash();
32 private:
33     CSplashScreenMng();  //构造函数
34     ~CSplashScreenMng(); //析构函数
35     CSplashScreenMng(const CSplashScreenMng &other); //拷贝构造
36     CSplashScreenMng& operator=(const CSplashScreenMng &other); //赋值运算操作符
37
38 private:
39     QSplashScreen*  m_pSplash;
40     static QMutex mutex;
41     static CSplashScreenMng* m_pSplashScreenMng; // CSplashScreenMng 全局唯一的变量
42 };
43
44 #endif //SPLASHSCREENMNG_H  

其次是关于实现文件SplashScreenMng.cpp

 1 #include "SplashScreenMng.h"
 2 #include <QMutex>
 3 #include <QObject>
 4 #include <QPixmap>
 5 #include <QSplashScreen>
 6 #include <QString>
 7
 8 QMutex CSplashScreenMng::mutex;
 9 CSplashScreenMng* CSplashScreenMng::m_pSplashScreenMng = NULL;
10
11 CSplashScreenMng::CSplashScreenMng()
12 {
13     m_pSplash = NULL;
14 }
15
16 CSplashScreenMng::~CSplashScreenMng()
17 {
18
19 }
20
21 CSplashScreenMng* CSplashScreenMng::getInstance()
22 {
23     if(NULL == m_pSplashScreenMng){
24         mutex.lock();
25         if(NULL == m_pSplashScreenMng){
26             m_pSplashScreenMng = new CSplashScreenMng();
27         }
28         mutex.unlock();
29     }
30     return m_pSplashScreenMng;
31 }
32
33 QSplashScreen*  CSplashScreenMng::showSplash(const QString &fileName)
34 {
35     QPixmap pixmap(fileName);
36     if(pixmap.isNull())
37         return NULL;
38
39     m_pSplash = new QSplashScreen(pixmap);
40     m_pSplash->show();
41     setSplashStatus(QObject::tr("初始化..."));
42
43     return  m_pSplash;
44 }
45
46 void CSplashScreenMng::setSplashStatus(const QString &text)
47 {
48     if(!m_pSplash)
49         return ;
50
51     QString splashText = text;
52     splashText += QObject::tr("请稍后...");
53     m_pSplash->showMessage(splashText, Qt::AlignLeft | Qt::AlignBottom, Qt::white);//这里设置为左下角显示信息
54 }
55
56 void CSplashScreenMng::destroySplash()
57 {
58     if(m_pSplash){
59         delete m_pSplash;
60         m_pSplash = NULL;
61     }
62 }  

文件封装结束需要调用,在调用过程中,资源文件的配置上图片格式无强制要求。但是在使用中仅仅放到工程目录Resources下程序仍然无法识别。后来尝试发现,是没有放入资源文件中。QT的资源文件是*.qrc,但是资源文件在VS2013环境下无法直接打开。这时可以通过打开Form Files下的*.ui,然后在QtDesigner下编辑*.qrc,增加图片文件,然后调用即可。

调用时的代码如下

 1 #include <windowsx.h>
 2 #include<QSplashScreen>
 3 #include<QtTest/qtest.h>
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7
 8     QSplashScreen* splash =CSplashScreenMng::getInstance()->showSplash(":/TunnelView/Resources/Initialize3.jpg");   9     //CSplashStart::getInstance()->setSplashStatus("Welcome");

 10   QTest::qSleep(1000);//延时 

 11    a.processEvents();12    TunnelView w;13    w.show();14   splash->finish(&w);15   CSplashScreenMng::getInstance()->DestroySplash();16   return a.exec();17 }

在选择图片目录时图片目录要包含至工程Resources上一层目录,否则图片无法加载。此时采用在QtDesigner中的资源管理中复制目录最方便,避免出错。

转载于:https://www.cnblogs.com/lvyalei/p/8179075.html

QT程序启动画面问题相关推荐

  1. Qt程序启动画面QSplashScreen类

    Qt程序启动画面QSplashScreen类 当程序初始化工作比较多,程序可能启动较长时间后,窗口才会显示出来,用户没准会抱怨程序响应的慢.为了改善用户体验,最好在程序初始化这段时间显示logo,或者 ...

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

    学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找 ...

  3. QT程序启动画面gif动画有静止背景的解决方法

    最近在做QT的程序启动画面的动画,用的是gif的动图.但是有个问题,就是总有一帧在背景那是静止的,也就是说动图叠上静止图上.如下图所示的齿轮所示. 左边的齿轮背后有个静止的齿轮,一直会在那,右边这个才 ...

  4. 进阶~Qt程序启动画面

    今天又把教程视频看了一遍,这次学的是程序启动画面设置方法,以下是源码: #include"mainwindow.h" #include #include"QPixmap& ...

  5. 进阶~Qt程序启动画面_vortex_新浪博客

    今天又把教程视频看了一遍,这次学的是程序启动画面设置方法,以下是源码: #include"mainwindow.h" #include #include"QPixmap& ...

  6. Qt程序启动画面QSplashScreen

    QSplashScreen会在应用程序的主窗口出现之前显示一个图片! #include "qmain.h" #include <QtGui/QApplication> ...

  7. QT5.9学习笔记之——程序启动画面

    多数大型应用程序启动时都会在程序完全启动前显示一个启动画面,在程序完全启动后消失.程序启动画面可以显示相关产品的一些信息,使用户在等待程序启动的同了解相关产品的功能,这也是一个宣传的方式.Qt中提供的 ...

  8. VC四种程序启动画面的制作方法

    使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢?本文提供四种方法,前三种适用于基于文档的应 ...

  9. 嵌入式Qt程序启动参数-qws 不需要X11桌面系统

    1 背景 通过串口终端启动arm开发板(linux系统)的Qt应用程序,提示: [cpp]  view plain copy [root@FORLINX6410]# /opt/qt-4.7.1/dem ...

最新文章

  1. Mule与Servicemix比较
  2. upc组队赛15 Supreme Number【打表】
  3. PDM 导出Excel
  4. 关于负载均衡的几个问题
  5. python 面试题(3)--- 进制转换
  6. Android热修复Java类_Android 热修复(一)
  7. python2中可以使用print()函数吗_Python3中的 print 函数有哪些用法?
  8. AWS ec2 安装手记
  9. 格拉布斯(Grubbs)准则法
  10. HTML制作简单课程表
  11. 湖北商贸学院计算机二级领取,湖北商贸学院教务管理系统入口http://jw.hbc.edu.cn/...
  12. Q版京剧脸谱来喽——花旦
  13. ITEXT处理pdf详解
  14. 企业从哪里开始构建弹性 IT 基础架构
  15. 迅为6818开发板资料-CAN总线和RFID驱动的配置方法
  16. 潘通色卡tcx电子版_潘通色卡电子版Pantone TPX(三)
  17. 建设工程项目质量成本优化与控制
  18. 七年IT生涯的经验教训
  19. Unity3D摄像机裁剪——NGUI篇
  20. mysql导入sql文件、数据库时报错ERROR: ASCII '\0' appeared in the statement

热门文章

  1. ibatis This SQL map does not contain a MappedStatement
  2. 树莓派4b自带wifi_树莓派4B日志二:WiFi远程配置与换源
  3. 没有workstation_这才是Win10的旗舰版:WorkStation版独享功能测试
  4. computed用发_Vue中的computed属性和nextTick方法
  5. SQL2008附加数据库只读怎么修改
  6. php类的实例化方法,php中类的定义和实例化方法
  7. android elf 加固_APK一键自动化加固脚本
  8. css下拉点击不动,CSS3 - 进行简单的点击下拉[关闭](CSS3 - Making a simple click-dropdown [closed])...
  9. 中专计算机网络技术试卷,2018年中职对口升学计算机网络技术模拟试题
  10. vimpython配色_超漂亮 vim 配置:space-vim