1. 程式人生 > >Qt中實現啟動畫面

Qt中實現啟動畫面

縱所周之,當一個程式的啟動比較耗時的時候,為了不讓使用者枯燥的等待或者是誤以為程式執行異常了,所以我們都會在啟動比較耗時的程式中加上啟動介面

,例如office軟體等等。

         在Qt中實現啟動介面,主要就是使用QSplashScreen類。該類比較簡單,這裡就不對類本身做過多說明了,主要是以一個例子來說明他的使用方法。

1、首先,我們的實現如下:
 

#include <QApplication>
#include <QSplashScreen>
#include <QPixmap>
#include <mainwindow.h>
#include <QDebug>

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

    QPixmap pixmap("screen.png");
    QSplashScreen screen(pixmap);
    screen.show();
    screen.showMessage("LOVE", Qt::AlignCenter, Qt::red);

    MainWindow window;
    window.show();

    screen.finish(&window);

    return app.exec();
}

這個時候執行程式,發現確實出現了啟動介面,但是啟動介面一閃而過,根本沒啥作用。

2、然後,我們想到的就是是否可以加個延時,使得Mainwindow初始化和啟動介面之間的時間久一點呢?

下面是我們的第二段程式碼:

#include <QApplication>
#include <QSplashScreen>
#include <QPixmap>
#include <mainwindow.h>
#include <QDateTime>#include <QDebug>
int main(int argc, char *argv[])
{    
	QApplication app(argc, argv);
    QPixmap pixmap("screen.png");    
	QSplashScreen screen(pixmap);    
	screen.show();    
	app.processEvents();    
	screen.showMessage("LOVE");

    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;    
	do{    
		now=QDateTime::currentDateTime();    
	} while (n.secsTo(now)<=5);//6為需要延時的秒數


    MainWindow window;    
	window.show();
    screen.finish(&window);
    return app.exec();
}

執行的結果依然是一閃而過,而且感覺加的延時不是啟動畫面的延時,而是程式開始執行的延時,也就是說過了5秒才顯示啟動畫面,然後啟動畫面一閃而過,最後顯示Mainwindow。


插曲:這個時候,我就開始在網上查資料了,看到網上也是說要加延時,而且一定要加上“ app.processEvents(); ”這句話,不然程式睡眠,介面不會得到更新。

             具體的就是參考下面兩個文章。最終我才知道我呼叫事件處理的地方不對,應該是在延時的5s之內都呼叫的,不然這5s之內介面也不會更新。

            http://blog.csdn.net/dbzhang800/article/details/6300425

            http://mobile.51cto.com/hot-238884.htm

3、有了上面的分析之後,下面兩個做法都是可以的

    (1),在啟動畫面和Mwindow構造之前延時,且延時之間呼叫事件處理,程式碼如下,開啟任意一個if 0,就可以了:
 

#include <QApplication>
#include <QSplashScreen>
#include <QPixmap>
#include <mainwindow.h>
#include <QDebug>
#include <QElapsedTimer>
#include <QDateTime>

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

    QPixmap pixmap("screen.png");
    QSplashScreen screen(pixmap);
    screen.show();
    screen.showMessage("LOVE", Qt::AlignCenter, Qt::red);
#if 0
    int delayTime = 5;
    QElapsedTimer timer;
    timer.start();
    while(timer.elapsed() < (delayTime * 1000))
    {
         app.processEvents();
    }
#endif

#if 0
    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;
    do{
        now=QDateTime::currentDateTime();
        app.processEvents();
    } while (n.secsTo(now)<=5);//5為需要延時的秒數
#endif

    MainWindow window;
    window.show();

    screen.finish(&window);

    return app.exec();
}

(2)    在Mainwindow建構函式之中延時並且呼叫事件處理,這個跟QSplashScreen類中的finish()方法相關,不懂的可以看看說明。程式碼如下:

#include "mainwindow.h"

#include <QTextEdit>
#include <QDateTime>
#include <QCoreApplication>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QTextEdit *edit=new QTextEdit;
    edit->setText("Splash Example!");
    setCentralWidget(edit);
    resize(600,450);

    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;
    do{
        now=QDateTime::currentDateTime();
        QCoreApplication::processEvents();
    } while (n.secsTo(now)<=5);//5為需要延時的秒數
}

執行效果跟預期一樣,截圖如下:

相關推薦

Qt實現啟動畫面

縱所周之,當一個程式的啟動比較耗時的時候,為了不讓使用者枯燥的等待或者是誤以為程式執行異常了,所以我們都會在啟動比較耗時的程式中加上啟動介面 ,例如office軟體等等。          在Qt中實現啟動介面,主要就是使用QSplashScreen類。該類比較簡

Qt實現執行緒安全的單例模式

之前專案中用到單例模式,用的是執行緒不安全的,這次專案用到了多執行緒,所以想到實現一個執行緒安全的單例模式。經過查詢資料,發現Qt本身有自己的執行緒安全單例模式實現方式。 Q_GLOBAL_STATIC巨集 使用方法:MonitorWindow.h #ifndef MONITORW

Qt實現滑鼠一段時間不用,自動隱藏

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this->setMouseTracking(true);

QT實現二維碼圖片生成

Linux環境下QT中實現二維碼生成有兩種方法,這兩種方法都需要用到開源的程式碼--qrencode。第一種方法是下載qrencode原始碼後,將其移植到目標板子上,然後在程式中包含其路徑進行使用;第二種方法是將qrencode原始碼新增到自己的程式中,直接呼叫使用。本文使用的第二種方法進行生成二維

Qt實現將float型別轉換為QString型別

在使用Qt Creator程式設計時,難免會用到將float型別轉換為QString型別的時候下面是我所有的方法: 1. 將QString型別轉化為float型別,很簡單     QString data;                 float num = data.

Qt 實現在控制元件中點選滑鼠,就在滑鼠點選處載入圖片的方法

首先應該知道,QLabel類是沒有點選事件的。我們需要點選滑鼠,那麼必須重寫一個QLabel類去繼承原來的QLabel。比如說我定義PutPicLabel來繼承QLabel。 在標頭檔案中應該這麼寫: #ifndef PUTPICLABEL_H #define PUTPI

QT 實現一個服務端接收兩個客戶端的解決方法

最近自己在折騰QT中實現TCP服務端的過程中,發現以往的例子都是點對點的,也就是說大都是一個客戶端,一個服務端,然後兩個進行通訊,而對於單個服務端與多個客戶端的通訊,非常稀少,找到一個但對於我們新手來說,有點複雜,不好理解,下面我介紹一個新手也能明白的一種解決方案。下面是ma

init.rc文件啟動c++程序,通過jni調用java實現

mini val sni ril urn runtime sport mco env </pre><p>註:假設是自己的myself.jar包,還要修改例如以下:</p><p>target/product/core_bas

Qt隱藏滾動條重新實現鼠標滾輪事件wheelEvent

spa pan del 滾輪 重載方法 div qt5 delta event delta()已經被棄用了,QT5中用的是angleDelta(),計算的時候取angleDelta().y()值。 #重載方法wheelEvent(self,event),即滾輪事件

QTVideoProbe的簡介和實現

put 為知 black its adding const return receiving qml 一、遇到問題 在Android機上使用QT進行圖像處理程序設計的時候,遇到的一個比較明顯的問題就是圖片采集的問題----攝像頭獲得是實時的視頻,如果我們想從中動

PyQt5開發小記,如何實現程序啟動畫面和退出提示?

argv qpi spl fin 對象 測試數據 pla widgets 分享 程序啟動畫面: if __name__ == "__main__": ui_style = UIStyle().get_style() app = QtWidgets.QAppl

QT 如何實現一個簡單的動畫

QT可以實現一下簡單的動畫,比如 運動的時鐘 閃爍的按鈕。 動畫的實現: (1)建立一個定時器 (2)呼叫QWidget::update()通知介面重繪 實現一個按鈕閃爍的例子: circlewidget.h #ifndef CIRCLAWIDGET_H #define CIRCLAWIDG

Qt採用多執行緒實現Socket程式設計

      本文介紹的是Qt中採用多執行緒Socket程式設計,由於工作專案的需要,使用Qt的socket程式設計。Qt裡的example是個不錯的教程,但是當我把程式碼移植

QT啟動畫面

程式啟動之前有時候需要一段時間來載入, 為了避免使用者感覺程式宕機卡頓的情況,特別加上開機介面,提醒使用者程式正在執行中. int main(int argc, char *argv[]) { QApplication a(argc, argv); std::str

Qt文字編輯器實現語法高亮功能(Qscitinlla)

Qt中文字編輯器實現語法高亮功能(Qscitinlla) Scintilla是一個免費、跨平臺、支援語法高亮的編輯控制元件。它完整支援原始碼的編輯和除錯,包括語法高亮、錯誤指示、程式碼完成(code completion)和呼叫提示(call tips)。能包含標記(marker)的頁邊(mar

QtQchart外掛實現PMW3901迷你光流模組上位機(串列埠通訊)

文章目錄 Qt中Qchart外掛實現PMW3901迷你光流模組上位機 光流計介紹 上位機 完整工程[猛戳這兒](https://github.com/LiangtaoZhong/PMW3901-monitor)。

ubuntu10.04下vim 實現 Qt 程式碼的自動補全

創建於 2012-05-20 遷移自個人的百度空間 -------------------------------- 1、首先下載ctags       sudo apt-get install 

芭蕉樹上第十六根芭蕉-- QtUi名字空間以及setupUi函式的原理和實現

用最新的QtCreator選擇GUI的應用會產生含有如下檔案的工程 下面就簡單分析下各部分的功能。 .pro檔案是供qmake使用的檔案,不是本文的重點【不過其實也很簡單的】,在此不多贅述。 所以呢,還是從main開始, #include <

flutter專案的ios版本怎麼設定啟動畫面

概述 這個問題經常看到有同學在問,那麼我們今天分享下怎麼在flutter專案中設定ios的啟動畫面。 在ios中設定啟動畫面有兩種方法,一種是採用StoryBoard設定,一種是直接採用圖片設定,下面來看下兩種方案。 開啟工程檔案 開啟ios專案下的XXX.xcw

使用MyBatis的ScriptRunner來執行sql檔案指令碼,實現啟動自動部署資料庫

最近專案中想要添入啟動制動完成資料庫配置的功能,剛開始想到的ANT方式,但是放棄了(凡是放棄的,根本原因是:我不會........);所以最後採用了ScriptRunner來執行,這個方法無論是DML還是DDL都可以執行,但是有幾點比較坑~~,咱們後話說。 首先我們介紹下當