QT開發應用程式的歡迎介面例項

2022-10-04 00:42:21 字數 991 閱讀 9875

主介面啟動太慢,通常要10秒以程式設計客棧上,所以想加個歡迎介面,等程式載入好再顯示主介面。

主介面(類名為mainwindow)啟動慢的原因是建構函式需要執行大量初始化的工作。

建立了welcome類作為歡迎介面,開始的思路是,在main函式中先建立welcome類的物件,然後show(),對於主介面,在建構函式將要返回時呼叫自己的show()方法,並且呼叫welcome的close()。但是歡迎介面總是只出現邊框,不顯示內容,並且窗體的背景也是虛的。

原因分析:

在qt中,窗體的各種事件的分發是由qapplication來完成的,在main函式中程式設計客棧,最後一行**是呼叫qapplication物件的exec程式設計客棧()方法,這個方法執行後,整個應用程式的事件才能被分發處理,但是在main函式中,建立mainwindow例項的時候,總是會等待mainwindow的建構函式執行完,才會執行到qapplication物件的exec()方法,所以在此之前歡迎介面的事件是不被響應的,paintevent()函式不會得到執行,所以也就不會正常顯示出來了,當mainwindow的建構函式執行完成,qapplication物件能夠處理事件分發時,也不需要歡迎介面顯示了,可以直接顯示主介面了。

只能想辦法讓mainwindow的建構函式立即返回,初始化的工作留在後續處理。但是誰來呼叫初始化的工作**呢,welcome類的建構函式也不能去呼叫它,否則一樣會很慢才能顯示出來。我的辦法是使用qtimer定時很短一段時間,自動觸發初始化**的執行,這樣不占用建構函式的執行時間,讓qapplication能夠盡快工作起來。

一下是簡略**:

main.cpp

int main(int argc, char *ar**)

mainwindow的建構函式

this->welcome=welcome;

if(welcome != 0)else

mainwindow的init()函式(將原建構函式的初始化**放到init()裡了)

if(welcome!=0)

本文位址:

QT下應用程式開發

一 應用程式的編輯與編譯 從最簡單也是最著名的hello word來學習qt。首先建立helloword.cpp mkdir hello vi helloword.cpp include int main int argc,char argv cd hello 指定交叉編譯器路徑 export pa...

QT應用程式單例項執行

我們經常會做一些軟體 程式只希望有最多乙個執行例項。我從網上找到了個方法,雖然現在還不太明白原理,但是這種方法總算會用了。原文摘自 int main int argc,char argv if sharemem create 1 return 0 當然別忘了在開頭加上 include 這段 應該不用...

Qt應用程式單例項化

在實際應用中,我們經常需要讓應用程式只有乙個例項,再開啟新的文件或者頁面時,只是替換現在的視窗或者新開啟乙個標籤,而不是重新啟動一次應用程式。qt中是否可以做到這樣呢,答案是肯定的,因為 qt本身可以直接呼叫系統 api,肯定可以做到,但是我們希望找到乙個跨平台的通用的解決方案。這就要用到qt的 q...