QObject的所有有核心方法、属性的详细解说
QObject 的 所有核心方法、属性 的详细解说(基于 PySide6/PyQt6 的 Python 实现),按功能分类说明:
一、父子对象管理
方法
-
setParent(parent: QObject)- 功能:设置对象的父对象,父对象被销毁时会自动销毁子对象。
- 示例:
parent = QObject() child = QObject() child.setParent(parent) # 设置父子关系
-
parent() -> QObject- 功能:返回当前对象的父对象。
- 示例:
print(child.parent() is parent) # 输出 True
-
children() -> List[QObject]- 功能:返回所有直接子对象的列表。
- 示例:
for child in parent.children(): print(child.objectName())
-
findChild(type, objectName: str = ..., options: Qt.FindChildOption = ...) -> QObject- 功能:按类型和名称查找子对象。
- 示例:
button = parent.findChild(QPushButton, "submitButton")
-
findChildren(...)- 功能:查找所有符合条件的子对象(支持正则表达式)。
- 示例:
buttons = parent.findChildren(QPushButton, Qt.FindDirectChildrenOnly)
二、信号与槽机制
方法
-
connect(signal, slot, type=Qt.AutoConnection)- 功能:连接信号与槽。
- 示例:
button.clicked.connect(self.handle_click)
-
disconnect()- 功能:断开所有信号连接。
- 示例:
button.clicked.disconnect()
-
blockSignals(block: bool) -> bool- 功能:临时阻塞信号发射。
- 示例:
obj.blockSignals(True) # 阻止信号 obj.my_signal.emit() # 不会触发槽函数 obj.blockSignals(False)
-
signalsBlocked() -> bool- 功能:检查信号是否被阻塞。
三、动态属性
方法
-
setProperty(name: str, value: Any) -> bool- 功能:设置动态属性(可存储任意类型数据)。
- 示例:
obj.setProperty("priority", 100)
-
property(name: str) -> Any- 功能:获取动态属性的值。
- 示例:
print(obj.property("priority")) # 输出 100
-
dynamicPropertyNames() -> List[QByteArray]- 功能:返回所有动态属性名称的列表。
四、对象标识与元信息
方法
-
setObjectName(name: str)- 功能:设置对象的唯一标识符(常用于样式表或查找)。
- 示例:
label.setObjectName("titleLabel")
-
objectName() -> str- 功能:返回对象的名称。
属性
objectName: str- 直接访问对象名称(等同于
objectName()和setObjectName())。
- 直接访问对象名称(等同于
五、定时器管理
方法
-
startTimer(interval: int, timerType: Qt.TimerType = Qt.CoarseTimer) -> int- 功能:启动定时器,返回定时器 ID。
- 示例:
self.timer_id = self.startTimer(1000) # 1秒触发一次
-
killTimer(id: int)- 功能:停止指定 ID 的定时器。
-
timerEvent(event: QTimerEvent)- 功能:重写此方法处理定时器事件。
- 示例:
def timerEvent(self, event): if event.timerId() == self.timer_id: print("Timer triggered!")
六、事件处理
方法
-
event(event: QEvent) -> bool- 功能:主事件处理器,可重写以处理所有事件。
-
installEventFilter(filterObj: QObject)- 功能:安装事件过滤器对象。
- 示例:
filter = EventFilter() obj.installEventFilter(filter)
-
removeEventFilter(filterObj: QObject)- 功能:移除事件过滤器。
七、线程支持
方法
-
moveToThread(thread: QThread)- 功能:将对象移动到指定线程(需在对象无父对象时调用)。
- 示例:
worker = Worker() thread = QThread() worker.moveToThread(thread) thread.start()
-
thread() -> QThread- 功能:返回对象所属的线程。
八、其他关键方法
方法
-
inherits(className: str) -> bool- 功能:检查对象是否继承某个类。
- 示例:
print(widget.inherits("QWidget")) # 输出 True
-
deleteLater()- 功能:安全延迟删除对象(由事件循环处理)。
-
dumpObjectTree()- 功能:调试时打印对象树结构。
-
dumpObjectInfo()- 功能:打印对象的信号/槽连接信息。
九、核心属性(PySide6/PyQt6 中通过方法访问)
objectName:对象的唯一标识符。parent:父对象(通过parent()方法访问)。children:子对象列表(通过children()方法访问)。
十、完整代码示例
示例:综合使用父子对象、信号、动态属性
from PySide6.QtCore import QObject, Signal, Slot, QTimer
class Sensor(QObject):
data_updated = Signal(float)
def __init__(self, parent=None):
super().__init__(parent)
self.setObjectName("TemperatureSensor")
self._value = 0.0
def start_monitoring(self):
self.timer = QTimer(self) # 父对象为 self,自动管理内存
self.timer.timeout.connect(self.update_value)
self.timer.start(1000)
def update_value(self):
self._value += 1.5
self.data_updated.emit(self._value)
class Monitor(QObject):
@Slot(float)
def log_value(self, value):
print(f"Current value: {value}")
# 使用示例
sensor = Sensor()
monitor = Monitor()
sensor.data_updated.connect(monitor.log_value)
sensor.start_monitoring()
# 动态属性
sensor.setProperty("unit", "°C")
print(sensor.property("unit")) # 输出 °C
关键总结
- 父子对象树:确保内存自动管理,避免内存泄漏。
- 信号与槽:实现跨对象通信,松耦合设计。
- 动态属性:灵活扩展对象属性,支持元编程。
- 事件系统:通过重写
event()或使用事件过滤器自定义行为。 - 线程安全:使用
moveToThread()实现多线程编程。
在 Python 中需注意:PySide6/PyQt6 的对象生命周期受 Python 垃圾回收和 Qt 父子关系的双重管理,建议优先使用 Qt 的父子关系进行内存管理。
浙公网安备 33010602011771号