【发布时间】:2011-12-13 15:30:18
【问题描述】:
我正在学习 Qt 库。最近我遇到了slots 的概念,到目前为止,我将它们理解为作为对某些事件的反应而执行的函数。是只有这个还是其他?
为什么他们为这么普通的事情选择了这样一个奇特的名字slots?这个词有很多意思。他们打算在 Qt 中考虑 slots 的什么含义?
谢谢
【问题讨论】:
标签: qt pyqt pyqt4 signals-slots
我正在学习 Qt 库。最近我遇到了slots 的概念,到目前为止,我将它们理解为作为对某些事件的反应而执行的函数。是只有这个还是其他?
为什么他们为这么普通的事情选择了这样一个奇特的名字slots?这个词有很多意思。他们打算在 Qt 中考虑 slots 的什么含义?
谢谢
【问题讨论】:
标签: qt pyqt pyqt4 signals-slots
signal 和 slot 这两个术语有些不匹配。
更好的选择可能是signal 和receiver,或者connector 和slot。
在 C++ 中,信号只能连接到已定义为槽的函数。尝试将信号连接到普通功能就像尝试将 USB 电缆连接到以太网端口。
然而,在 PyQt 中,这种区别并不那么重要,因为 任何 可调用对象都可以连接到信号,而不仅仅是预定义的槽。
话虽如此,PyQt 的最新版本还提供了一个pyqtSlot decorator,可用于定义具有多个不同签名的插槽。一般来说,在 PyQt 中,连接到预定义的插槽(无论是 C++ 还是 PyQt)比连接到普通的 python 可调用对象更有效。
有关 PyQt 中信号和槽支持的完整详细信息,请参阅reference guide。
【讨论】:
slot这个词呢?一些有趣的故事或意外?
slot 的含义可能最接近您提供的字典链接中的第一个:即接收某些东西的孔径:像钥匙孔,或者......(好吧,发挥你的想象力;-)我猜他们可能也一直在寻找与signal同一个字母开头的单词。
插槽与信号一起使用。您将信号连接到插槽。这是 Qt 本身的核心概念,并不特定于 PyQt。
Qt 文档有详细信息:Signals & Slots。
这只是一个非常方便的概念,可以在代码中实现相当清晰的层分离。
插槽本身是普通函数(在 C++ 中),您可以将它们用作普通函数以及“信号接收器”。
【讨论】: