在程序打開的時候,啓動畫面是很正常的。ide
對於這個qt提供了QSplashScreen類,但是我在使用過程當中,他老是一閃而過,不是咱們想要的。咱們使用啓動畫面,若是沒有模塊檢測,那咱們只是想它顯示幾秒鐘而已。下面是個人辦法,繼承QSplashScreen,在加個定時器就好了。函數
#ifndef SPLASHSCREEN_H動畫
#define SPLASHSCREEN_H
#include <QSplashScreen>
#include <QTimer>
class splashScreen : public QSplashScreen
{
Q_OBJECT
public:
explicit splashScreen(const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0);
// splashScreen(QWidget * parent, const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0);
void setShowSecond(int _second);//設置啓動畫面的顯現時長,單位是秒,不是微秒
void startTimer() {show();timer.start();}//定時器開始工做
signals:
void timeOver();//達到規定的顯示時長髮出此信號
public slots:
protected slots:
void stopTimer();//關閉定時器
private:
~splashScreen(){}
QTimer timer;//顯示時長定時器
};
#endif // SPLASHSCREEN_H
#include "splashscreen.h"splashScreen::splashScreen(const QPixmap &pixmap, Qt::WindowFlags f) :QSplashScreen(pixmap,f){
}
//splashScreen::splashScreen(QWidget * parent, const QPixmap & pixmap = QPixmap(), Qt::WindowFlags f = 0):// QSplashScreen(parent, pixmap, f)//{
//}
void splashScreen::setShowSecond(int _second){
timer.setInterval(_second*1000);connect(&timer,SIGNAL(timeout()),this,SLOT(stopTimer()));}
void splashScreen::stopTimer(){
timer.stop();emit timeOver();close();deleteLater();//此處是特地添加,只能在一次使用,且只能是在heap區使用}
int main(int argc, char *argv[]){
QApplication a(argc, argv);QPixmap pix(":/picture/splashScreen.jpg");splashScreen *ps = new splashScreen(pix);ps->setShowSecond(3);ps->startTimer();MainWindow w;QObject::connect(ps,SIGNAL(timeOver()),&w,SLOT(show()));w.resize(QApplication::desktop()->size()*0.9);//以設備的顯示器件的大小來肯定主界面的大小return a.exec();}爲何我想在啓動畫面結束以後以後直接釋放,由於它就是這時候有用,我不想在程序運行結束的時候在釋放,資源是寶貴的。 還有就是默認的鼠標點擊操做是hide()。若是你不想不當心點了鼠標畫面消失,而且主界面尚未出來,仍是重寫void mousePressEvent(QMousePressEvent *),函數體爲空就行。