国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

QT開發(fā)應用程序的歡迎界面實例

2020-01-26 13:57:11
字體:
來源:轉載
供稿:網友

主界面啟動太慢,通常要10秒以上,所以想加個歡迎界面,等程序加載好再顯示主界面。

主界面(類名為MainWindow)啟動慢的原因是構造函數(shù)需要執(zhí)行大量初始化的工作。

創(chuàng)建了Welcome類作為歡迎界面,開始的思路是,在main函數(shù)中先創(chuàng)建Welcome類的對象,然后show(),對于主界面,在構造函數(shù)將要返回時調用自己的show()方法,并且調用welcome的close()。但是歡迎界面總是只出現(xiàn)邊框,不顯示內容,并且窗體的背景也是虛的。

原因分析:

在QT中,窗體的各種事件的分發(fā)是由QApplication來完成的,在main函數(shù)中,最后一行代碼是調用QApplication對象的exec()方法,這個方法執(zhí)行后,整個應用程序的事件才能被分發(fā)處理,但是在main函數(shù)中,創(chuàng)建MainWindow實例的時候,總是會等待MainWindow的構造函數(shù)執(zhí)行完,才會執(zhí)行到QApplication對象的exec()方法,所以在此之前歡迎界面的事件是不被響應的,paintEvent()函數(shù)不會得到執(zhí)行,所以也就不會正常顯示出來了,當MainWindow的構造函數(shù)執(zhí)行完成,QApplication對象能夠處理事件分發(fā)時,也不需要歡迎界面顯示了,可以直接顯示主界面了。

只能想辦法讓MainWindow的構造函數(shù)立即返回,初始化的工作留在后續(xù)處理。但是誰來調用初始化的工作代碼呢,welcome類的構造函數(shù)也不能去調用它,否則一樣會很慢才能顯示出來。我的辦法是使用QTimer定時很短一段時間,自動觸發(fā)初始化代碼的執(zhí)行,這樣不占用構造函數(shù)的執(zhí)行時間,讓QApplication能夠盡快工作起來。

一下是簡略代碼:

main.cpp

int main(int argc, char *argv[]){  QApplication app(argc, argv);  //...其他代碼  WelcomeWindow *welcome=new WelcomeWindow();  MainWindow w(welcome);   return app.exec();}

MainWindow的構造函數(shù)

this->welcome=welcome;if(welcome != 0){  welcome->show();  timerInit=new QTimer();  timerInit->setInterval(100);  timerInit->setSingleShot(true);//設置Timer只觸發(fā)一次  timerInit->start();  connect(timerInit, SIGNAL(timeout()), SLOT(init()));}else{  init();}

MainWindow的init()函數(shù)(將原構造函數(shù)的初始化代碼放到init()里了)

if(welcome!=0){  welcome->close();  delete welcome;  this->show();}

以上這篇QT開發(fā)應用程序的歡迎界面實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 庐江县| 芜湖县| 丰原市| 额济纳旗| 开封市| 西乌| 获嘉县| 扬中市| 望城县| 威信县| 达日县| 湛江市| 威海市| 原阳县| 无为县| 改则县| 永吉县| 甘德县| 含山县| 安陆市| 专栏| 泉州市| 开远市| 蓬安县| 安泽县| 南召县| 毕节市| 连山| 娱乐| 卓尼县| 乃东县| 德州市| 海门市| 页游| 饶平县| 闸北区| 巫溪县| 泸定县| 聂荣县| 祁连县| 蕉岭县|