如何在PySide / PyQt中连接QApplication()和QWidget()对象()

幽沉谢世事,俯默窥唐虞。这篇文章主要讲述如何在PySide / PyQt中连接QApplication()和QWidget()对象?相关的知识,希望能为你提供帮助。
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_())

【如何在PySide / PyQt中连接QApplication()和QWidget()对象()】这背后的魔力是什么?
答案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()来避免在创建/销毁许多QWidgets时可能发生的不必要的开销。

    推荐阅读