Signals and Slots 信号和插槽
由于Qt的性质,需要一种通信方式,这就是这种机制成为Qt的核心特征的原因。QObject
简单来说,您可以像与房屋中的灯光互动一样理解信号和插槽。当您移动电灯开关(信号)时,您得到的结果可能是您的灯泡已打开/关闭(插槽)。
在开发接口时,您可以通过单击按钮的效果获得一个真实的例子:“单击”将是信号,而插槽将是单击该按钮时发生的情况,例如关闭窗口,保存文档等。
所有继承自或其子类之一的类(如)都可以包含信号和槽。当对象以其他对象可能感兴趣的方式更改其状态时,它们会发出信号。这就是对象进行通信的全部内容。它不知道也不关心是否有任何东西正在接收它发出的信号。这是真正的信息封装,并确保对象可以用作软件组件。QObjectQWidget
插槽可用于接收信号,但它们也是普通的成员函数。就像一个物体不知道是否有任何东西接收到它的信号一样,一个插槽也不知道它是否有任何信号连接到它。这确保了可以使用Qt创建真正独立的组件。
您可以将任意数量的信号连接到单个插槽,并且信号可以根据需要连接到任意数量的插槽。甚至可以将一个信号直接连接到另一个信号。(每当发出第一个信号时,这将立即发出第二个信号。
Qt的小部件有许多预定义的信号和插槽。例如,QAb 字符串按钮(Qt 中按钮的基本类)具有单击 () 信号,而 QLine 编辑(单行输入字段)具有名为“清除()”的插槽。因此,可以通过在QLineEdit的右侧放置一个QTool按钮并将其单击()信号连接到插槽“clear()”来实现带有清除文本按钮的文本输入字段。这是使用信号的连接()方法完成的:
实际上,可以将同名的信号和槽用于不同的参数类型列表。这是Qt 5的遗留物,不建议用于新代码。在 Qt 6 中,信号对于不同类型的信号具有不同的名称。
以下示例对信号和槽使用两个处理程序来展示不同的功能。
import sys
from PySide6.QtWidgets import QApplication, QPushButton
from PySide6.QtCore import QObject, Signal, Slot
class Communicate

本文围绕Qt的信号和插槽机制展开。介绍了该机制是Qt核心特征,以电灯开关和灯泡为例解释其原理。还说明了开发接口时信号与插槽的应用,如按钮单击。指出继承自QObject的类可包含信号和槽,且信号与插槽可灵活连接,还提及了Qt小部件的预定义信号和槽。
最低0.47元/天 解锁文章
2235

被折叠的 条评论
为什么被折叠?



