如何在Qt4中广播信号

时间:2010-07-20 03:36:00

标签: python qt4 pyqt signals

我想在Qt4(PyQt4)程序中使用一个范例,其中一个组件能够响应信号,而不知道它来自何处。

我的初步读数表明我必须明确地将信号连接到插槽。但我想要的是,许多组件中的任何一个都能够发送信号,并由其他组件处理。

与其他工具包相比,例如,在wxWidgets中我会使用事件。这些自动从子窗口/对象传播到父母。在每个级别,他们都可以处理。这意味着如果我有很多可能发出相同事件的子节点,我不必将它们全部显式连接到处理程序。我可以把处理程序放在父级中,或者放在窗口层次结构中的某个更高级别。这意味着只有事件生成器和消费者需要知道事件。消费者不需要知道事件来源的位置,有多少这样的来源,或其他任何相关信息。

这在Qt中是否可行 - 是否有另一种方法?也许有信号和插槽的替代事件机制?

3 个答案:

答案 0 :(得分:1)

这是不可能的 - 你必须有一些知道信号对象和接收对象的东西来连接这两者。但是,根据您的需要,您可能能够设置一个介于两者之间的类(所以带有信号的对象告诉它们存在的类,并且有这样的信号,而带有插槽的对象告诉班级它们存在并且有这样一个槽来连接到给定的信号,并且中介类跟踪这两个,在必要时建立连接。)

答案 1 :(得分:0)

难道你不想只是想要一个老式的方法调用吗?响应只是方法的返回值。

答案 2 :(得分:0)

信号处理程序不知道发射器(仅信号类型),并且发射器不知道连接的处理程序。许多处理程序可以连接到相同的信号,并按连接顺序执行。信号可以从很多地方发出。