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),即滾輪事件
QT中VideoProbe的簡介和實現
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
Qt中Qchart外掛實現PMW3901迷你光流模組上位機(串列埠通訊)
文章目錄 Qt中Qchart外掛實現PMW3901迷你光流模組上位機 光流計介紹 上位機 完整工程[猛戳這兒](https://github.com/LiangtaoZhong/PMW3901-monitor)。
ubuntu10.04下vim 中實現 Qt 程式碼的自動補全
創建於 2012-05-20 遷移自個人的百度空間 -------------------------------- 1、首先下載ctags sudo apt-get install 
芭蕉樹上第十六根芭蕉-- Qt中Ui名字空間以及setupUi函式的原理和實現
用最新的QtCreator選擇GUI的應用會產生含有如下檔案的工程 下面就簡單分析下各部分的功能。 .pro檔案是供qmake使用的檔案,不是本文的重點【不過其實也很簡單的】,在此不多贅述。 所以呢,還是從main開始, #include <
flutter專案的ios版本中怎麼設定啟動畫面
概述 這個問題經常看到有同學在問,那麼我們今天分享下怎麼在flutter專案中設定ios的啟動畫面。 在ios中設定啟動畫面有兩種方法,一種是採用StoryBoard設定,一種是直接採用圖片設定,下面來看下兩種方案。 開啟工程檔案 開啟ios專案下的XXX.xcw
使用MyBatis中的ScriptRunner來執行sql檔案指令碼,實現啟動自動部署資料庫
最近專案中想要添入啟動制動完成資料庫配置的功能,剛開始想到的ANT方式,但是放棄了(凡是放棄的,根本原因是:我不會........);所以最後採用了ScriptRunner來執行,這個方法無論是DML還是DDL都可以執行,但是有幾點比較坑~~,咱們後話說。 首先我們介紹下當