2013-07-11 53 views
7

QApplication()和QWidget()如何連接?在PySide/PyQt中如何連接QApplication()和QWidget()對象?

這是我複製的示例代碼,它創建QApplication對象和QWidget對象,但兩個對象之間沒有鏈接。我期望像app.setWidget(did)這樣的東西來教PySide/PyQt控制器關於創建的小部件。

# http://zetcode.com/gui/pysidetutorial/firstprograms/ 
# 1. PySide.QtGui is the class 
import sys 
from PySide import QtGui 

# 2. setup the application 
app = QtGui.QApplication(sys.argv) 

# 3. create the widget and setup 
wid = QtGui.QWidget() 
wid.resize(250, 150) 
wid.setWindowTitle('Simple') 

# 4. Show the widget 
wid.show() 

# 5. execute the app 
sys.exit(app.exec_()) 

背後有什麼神奇之處?

回答

8

QApplication是一個單身所以這將是非常容易的,QWidget做:QApplication.instance(),並與QApplication實例進行交互。

其實嘗試QApplication之前實例QWidget導致的錯誤:

>>> QtGui.QWidget() 
QWidget: Must construct a QApplication before a QPaintDevice 

這可能意味着這是什麼情況。


編輯:我已經下載了Qt源而事實上,在src/gui/kernel/qwidget.cpp,線路328,有:

if (!qApp) { 
    qFatal("QWidget: Must construct a QApplication before a QPaintDevice"); 
    return; 
} 

qApp是一個指向QApplication實例(也就是它相當於撥打QApplication.instance())。

因此,最後,QWidget通過全局變量與QApplication交互,儘管這不是必需的。他們可能使用qApp而不是QApplication.instance()來避免創建/銷燬多個QWidget時可能發生的不必要開銷。

相關問題