簡體   English   中英

如果使用QApplication,qApp-> exec()是否有效

[英]Is qApp->exec() valid if using a QApplication

如果我正在使用QApplication實例,調用qApp->exec()QCoreApplication::exec()是否有效? 由於它是一個靜態函數,因此在兩種情況下都會調用QCoreApplication::exec() 然而,似乎即使我打電話給其中一個,我的基於QApplication的程序運行得很好 - 這只是運氣/巧合還是有效?

謝謝你的幫助!

簡短回答:

這不是運氣,因為靜態函數也應該像普通的非虛函數一樣運行。

答案很長:

靜態函數是不使用指針的成員函數。 當您從對象調用它時,它的行為類似於普通成員。

由於QAppliction派生自QCoreApplication,而exec()是QCoreApplication的成員,因此它也是從QCoreApplication派生的類型的對象的成員。

qApp返回一個指向QApplication對象的指針,該對象也是一個QCoreApplication,因此它也包含了exec()。

qApp只是QCoreApplication::instance()#define 所有qApp在使用它時都在告訴編譯器在哪里找到exec()函數。 但是因為exec()是一個靜態函數,所以它不是通過對象調用的,即使你的代碼看起來像它。 因此,從編譯器的角度來看, qApp->exec()應完全等同於QCoreApplication::exec() 也就是說,我不知道在這種情況下C ++標准是否要求qApp為非null,即使它在技術上不需要使用。

QT在QApplication上使用單例模式,因此所有調用最終都會調用QApplication的單個實例。 為什么他們選擇將qApp放在一起騎行很奇怪,但它似乎是最短的字符串。 我更喜歡保持指向你自己創建的原始QApplication的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM