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_())
这背后的魔力是什么?
答案 0 :(得分:10)
QApplication
是一个单身人士,因此QWidget
可以轻松完成:QApplication.instance()
并与QApplication
实例进行互动。
事实上,在QWidget
之前尝试实例化QApplication
会导致错误:
>>> 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
时可能发生的不必要的开销。