如何在Qt4中广播信号

3 投票
3 回答
1204 浏览
提问于 2025-04-16 01:33

我想在一个Qt4(PyQt4)程序中实现一种模式,让某个组件能够响应信号,而不需要知道这个信号是从哪里来的。

我最开始的理解是,我必须明确地将信号连接到槽(处理函数)。但我希望的是,多个组件都能发送信号,而另一个组件可以处理这些信号。

拿其他工具包来比较,比如在wxWidgets中,我会使用事件。这些事件会自动从子窗口或对象传递到父窗口。在每个层级上都可以处理这些事件。这意味着如果我有很多子组件可能会发出相同的事件,我就不需要把它们都明确连接到处理函数。我只需要把处理函数放在父组件或者更高层级的窗口中就可以了。这就意味着,只有事件的产生者和消费者需要知道这个事件的存在。消费者不需要知道事件的来源、来源有多少个,或者其他任何相关信息。

在Qt中,这种情况可能实现吗?有没有其他的方法?也许有一种替代的事件机制,而不是信号和槽?

3 个回答

0

信号处理器并不知道是谁发出的信号,它们只知道信号的类型。而发出信号的地方也不知道有哪些处理器连接在一起。很多处理器可以连接到同一个信号,并且它们会按照连接的顺序依次执行。一个信号可以在很多地方被发出。

0

你难道不想用一种简单直接的方法来调用吗?这样得到的结果就是这个方法返回的值。

1

这件事并不是那么简单——你需要有一个了解信号对象和接收对象的东西,才能把它们连接起来。不过,根据你的需求,你可能可以创建一个中介类来在这两者之间进行协调。也就是说,发出信号的对象会告诉这个中介类它们的存在以及它们有什么信号,而接收信号的对象则会告诉中介类它们的存在以及它们有什么插槽可以连接到特定的信号。这个中介类会跟踪这两者,并在需要的时候建立连接。

撰写回答