2013-07-11 24 views
7

QApplication() ve QWidget() nasıl bağlanır?PySide/PyQt'de QApplication() ve QWidget() nesneleri nasıl bağlanır?

Bu, kopyaladığım bir örnek koddur, QApplication nesnesi ve QWidget nesnesini oluşturur, ancak iki nesne arasında hiçbir bağlantı yoktur. Oluşturulan widget hakkında PySide/PyQt denetleyicisini öğretmek için app.setWidget(did) gibi bir şey bekledim.

# 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_()) 

Bunun ardındaki sihir nedir? QApplication.instance() ve QApplication örneği ile etkileşim: QWidget yapmak için, çok kolay olurdu böylece

cevap

8

QApplication bir tekil olduğunu. QApplication önce QWidget örneğini çalışırken Aslında

bir hata ile sonuçlanır: muhtemelen bu ne demektir

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

.


Düzenleme: Ben qt kaynaklardan indirdiğiniz ve aslında, src/gui/kernel/qwidget.cpp yılında, hat 328, vardır: (qAppQApplication örneği için bir işaretçi olan

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

yani onu QApplication.instance() numaralı telefonu aramakla eşdeğerdir. QWidget Sonunda, QApplication ile bir global değişken üzerinden etkileşime girmesine rağmen, etkileşimde bulunmasına rağmen. Muhtemelen QWidget s'yi yaratırken/yok ederken oluşabilecek gereksiz ek yükü önlemek için QApplication.instance() yerine qApp kullanırlar.

İlgili konular