020-QObject-对象的父子关系-Qt内存管理机制

淩亂°似流年 2023-07-07 03:51 58阅读 0赞

资源:Python-GUI-PyQ5总概述.xmind;QObject.xmind


一、QObject

(1)所有的对象都是直接或者间接的继承自QObject


(2)QObjects在一个对象树中组织他们自己,当创建一个QObject时,如果使用了其他对象作为其父对象,那么,他就会被添加到父对象的children()列表。

  1. from PyQt5.Qt import *
  2. class Window(QWidget):
  3. def __init__(self):
  4. super().__init__()
  5. self.setWindowTitle("QObject的学习") # 窗口标题
  6. self.resize(500, 500) # 设置窗口大小
  7. self.setup_ui()
  8. def setup_ui(self):
  9. self.QObject内存管理机制()
  10. def QObject内存管理机制(self):
  11. obj1=QObject()
  12. obj2=QObject()
  13. obj2.setParent(obj1)
  14. #监听obj2对象被释放
  15. obj2.destroyed.connect(lambda:print("obj2对象被释放了"))
  16. if __name__ == '__main__':
  17. import sys
  18. app = QApplication(sys.argv)
  19. window = Window()
  20. window.show()
  21. sys.exit(app.exec_())
  22. #返回
  23. '''
  24. obj2对象被释放了
  25. '''

(3)当父对象被销毁时,这个QObject也会被销毁。(如下代码所示)

  1. from PyQt5.Qt import *
  2. class Window(QWidget):
  3. def __init__(self):
  4. super().__init__()
  5. self.setWindowTitle("QObject的学习") # 窗口标题
  6. self.resize(500, 500) # 设置窗口大小
  7. self.setup_ui()
  8. def setup_ui(self):
  9. self.QObject内存管理机制()
  10. def QObject内存管理机制(self):
  11. obj1=QObject()
  12. self.obj1=obj1
  13. obj2=QObject()
  14. obj2.setParent(obj1)
  15. #监听obj2对象被释放
  16. obj2.destroyed.connect(lambda:print("obj2对象被释放了"))
  17. del self.obj1
  18. if __name__ == '__main__':
  19. import sys
  20. app = QApplication(sys.argv)
  21. window = Window()
  22. window.show()
  23. sys.exit(app.exec_())
  24. #返回
  25. '''
  26. obj2对象被释放了
  27. '''

二、QWidget

(1)扩展了父-子关系


(2)当一个控件设置了父控件,则这个控件会包含在父控件的内部、受父控件区域剪裁、父控件被删除是,子控件会自动删除。


(3)场景案例

①一个对话框,上面有很多操作按钮(取消,ok):按钮和对话框本身是父子控件关系。

②我们操作的时候,操作的是对话框控件的本身,而不是其内部的子控件(按钮)

③当对话框被删除时,内部的子控件也会自动删除

发表评论

表情:
评论列表 (有 0 条评论,58人围观)

还没有评论,来说两句吧...

相关阅读

    相关 QTQObject简介

    1、简介 QObject类是所有Qt对象的基类,是Qt对象模型的核心,这个模型的主要特征为信号与槽,信号与槽是一个非常重要的机制,用于对象间的通信。连接信号与槽使用`co