在程序启动时常由于加载数据或加载库文件会一段时间才弹出主窗口,期间心急或不明所以的用户会以为 app有问题,“咋半天没反应呢”。
这是我们就可以通过一个启动画面告知用户一些信息,请他们耐心等候。
QT已提供了QSplashScreen来处理启动画面,
1)QSplashScreen ( const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0 );//默认desktop为父窗体
2)QSplashScreen ( QWidget * parent, const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0 );//可指定父窗体
当然,一个app可以设置多个启动画面,例如在列表中用户操作加载大量数据时,用一个启动画面提示用户要比鼠标等候状态:
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
QApplication::restoreOverrideCursor();
显示来得更有意思。
void finish ( QWidget * mainWin );可以设置主窗口显示出来,并且 启动画面隐藏,当然程序员也可以按自己的喜欢自行调用close 直接关闭
示例代码:
//main.cpp
#include <QApplication>
#include <QSplashScreen>
#include <QDesktopWidget>
#include <QFont>
#include <QObject>
#include <QTimer>
#include <QMainWindow>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSplashScreen splash(QPixmap(":/images/splash.jpg"));
QFont _font("Courier New", 20);
_font.setBold(true);
splash.setFont(_font);
splash.move ((QApplication::desktop()->width() - splash.width())/2
,(QApplication::desktop()->height() - splash.height())/2);
splash.show();
splash.showMessage(
"SplashScreen test\n"
"version 1.2.14\n"
"xxx All rights reserved\n"
"load data from db,please wait!\n"
,Qt::AlignHCenter);
//
app.processEvents();
QMainWindow w;
//设置延迟,防止一闪而过
QTimer timer;
QObject::connect(&timer,SIGNAL(timeout()),
&w, SLOT(show()));
QObject::connect(&timer,SIGNAL(timeout()),
&splash, SLOT(close()));
timer.start(1000);
return app.exec();
}
//main.cpp
//.pro
TEMPLATE = app
DESTDIR = bin
CONFIG += qt debug_and_release static
CONFIG(debug, debug|release) {
TARGET = SplashScreend
OBJECTS_DIR = debug/obj
MOC_DIR = debug/moc
} else {
TARGET = SplashScreen
OBJECTS_DIR = release/obj
MOC_DIR = release/moc
}
SOURCES += main.cpp\
RESOURCES += ./SplashScreen.qrc
//.pro
//.qrc
<RCC version="1.0">
<qresource prefix="/images">
<file alias="splash.jpg">images/splash.jpg</file>
</qresource>
</RCC>
//.qrc