![](/img/trans.png)
[英]QT Application crashes using QSettings instance via qApp->property
[英]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.