Python 子类化QMainWindow和QApplication之间的区别
我试着在他们中的任何一个都没有注意到变化的情况下制作一个窗口……所以你实际上是在问这样的问题: 子类化Python 子类化QMainWindow和QApplication之间的区别,python,pyqt5,Python,Pyqt5,我试着在他们中的任何一个都没有注意到变化的情况下制作一个窗口……所以你实际上是在问这样的问题: 子类化list和子类化int之间有什么区别 虽然这两个类都继承自同一个类(在您的例子中,pythonobjectforlist和int),但它们做的事情完全不同 QApplication继承自(反过来,QApplication继承自)。 Qt应用程序负责运行和管理Qt,它的创建对于创建许多Qt元素并与之交互是必需的。最重要的是,Qt小部件(窗口、按钮等)始终需要QApplication,以便正确显示它
list
和子类化int
之间有什么区别
虽然这两个类都继承自同一个类(在您的例子中,pythonobject
forlist
和int
),但它们做的事情完全不同
QApplication继承自(反过来,QApplication继承自)。Qt应用程序负责运行和管理Qt,它的创建对于创建许多Qt元素并与之交互是必需的。最重要的是,Qt小部件(窗口、按钮等)始终需要QApplication,以便正确显示它们并允许完全的用户交互 启动应用程序时(通过运行其
exec()
),您将进入其事件循环。这意味着它将等待来自代码、用户或系统的任何事件,并做出相应的反应。这就是事件循环的概念:它将静默地空闲,等待“某事”发生
例如,如果在QDialog上调用show()
,Qt将创建一个show事件,该事件将被“发送”到操作系统,告诉它将显示一个新的“窗口”;系统将创建一个窗口,Qt将知道该窗口的处理程序,Qt将创建一个“绘制事件”,该事件将由对话框的paintEvent
接收:在该方法中,窗口将实际“绘制”,并最终显示给用户。(注意,这是一个巨大的过度简化:事实上事情比这更复杂,但这不是这个答案的范围)
QMainWindow继承自QWidget,QWidget是表示Qt中GUI元素的所有对象的基类。简单地说,它本身几乎什么都不做。它只对Qt应用程序发送的事件做出反应:上述绘制事件,还包括键盘/鼠标事件或系统请求。 如果向其发送了paintEvent,它将“绘制”窗口内容。如果鼠标点击它,它将尝试将其发送到该事件坐标处存在的小部件,等等 正如您所看到的,这些类做的事情非常不同。
总之:子类化QMainWindow或QApplication之间有巨大的区别。。。因为没有。
这完全取决于您的需要,因为这些类的使用非常不同,因为它们介于
list
和int
之间
子类化通常仅在需要扩展或修改现有类的功能时进行。
如果您需要扩展或修改Qt主窗口小部件的行为,您将创建QMainWindow子类。
如果您需要扩展或修改Qt应用程序的行为,您将为Q[Core | Gui]应用程序创建子类
可能的情况:
- 我想创建一个主窗口类,当实例化时,它已经有一个带有“文件”子菜单和一些小部件的菜单栏,这样我就可以创建更多的主窗口,并且所有的主窗口都已经使用该菜单进行了设置:子类QMainWindow
- 我需要一个管理多个主窗口的应用程序,并且我希望使用一个公共界面与它们交互(当一个窗口关闭时,打开另一个窗口,等等),来跟踪它们:子类QApplication
- 我只需要一个主窗口,但我必须重写它的许多方法,“猴子补丁”将是一团混乱:子类QMainWindow
- 我必须过滤应用程序范围内的事件并对其进行处理(例如,有多个窗口和对话框,但如果所有窗口和对话框都关闭了,我不想退出应用程序,因为有些可能会在一段时间后或在某些用户交互后重新出现):子类QApplication
QApplication和QMainWindow唯一的共同点是它们都继承自QObject。您是如何使用Window的,无论是子类QMainWindow还是QApplication都没有区别?我只是想创建一个基本窗口
Class Window (QMainWindow):
Class Window (QApplication):