C++ 同一对象上2个插槽的相同信号的Qt用例?

C++ 同一对象上2个插槽的相同信号的Qt用例?,c++,qt,C++,Qt,我对Qt完全是个新手。在阅读时,我遇到了以下配置: connect( Object1, Signal1, Object2, slot1 ) connect( Object1, Signal1, Object2, slot2 ) 这个用例可能是什么 来自Erlang/Python背景的我觉得很奇怪。我想,这一定与C++继承的曲折有关。 < P>这是当你有一个按钮改变另一个按钮的两个部分的情况。这听起来可能很傻,但这相当于从第一个插槽调用第二个插槽函数 也就是说,单击“播放/暂停”按钮会使“停止”

我对Qt完全是个新手。在阅读时,我遇到了以下配置:

connect( Object1, Signal1, Object2, slot1 )
connect( Object1, Signal1, Object2, slot2 )
这个用例可能是什么


来自Erlang/Python背景的我觉得很奇怪。我想,这一定与C++继承的曲折有关。

< P>这是当你有一个按钮改变另一个按钮的两个部分的情况。这听起来可能很傻,但这相当于从第一个插槽调用第二个插槽函数


也就是说,单击“播放/暂停”按钮会使“停止”按钮处于活动状态或处于活动状态,同时还会更改工具提示。这可以用一个插槽轻松完成,但您可能希望在其他时间独立完成这些操作。为了促进重用,您可以使用上述方法将一个信号连接到两个插槽。

这将允许其他对象分别触发slot1和slot2

connect( Object1, Signal1, Object2, slot1 );
connect( Object1, Signal1, Object2, slot2 );
connect( Object3, Signal1, Object2, slot1 );
connect( Object4, Signal1, Object2, slot2 );

这实际上是一种非常强大的MVC方式。。。假设您希望“连接”视图以侦听对象,而不是发送数据

您可以将PieChart视图连接到:

connect( MySourceModel, SIGNAL(newDataAreThere()), PieChartView, SLOT(notifyNewDataReceived()));
稍后在应用程序中,将创建另一个模块,并且还需要侦听数据。。。没问题:

connect( MySourceModel, SIGNAL(newDataAreThere()), AnotherView, SLOT(notifyNewDataReceived()));
你可以连接/断开你的视图,模型甚至不知道谁在听他说话。。。那不是他的问题


我希望我的小例子是可以理解的;)

谢谢你,亚当。但在我看来似乎很傻:我会提倡一种抽象,即信号的发射器不需要关心接收器侧需要发生什么。@jldupont:信号的发射器不需要关心接收器侧需要发生什么。它只是发出信号,继续它的任务。建立连接的人不一定是发射器,连接很可能是接收器,甚至是第三方(如果信号和插槽是公共的)。继续弗雷德所说的,我几乎总是发现接收器建立连接(直接或通过代理)的情况。有一个直接知道所有汇的源在某种程度上有违目的。正如弗雷德所说,记住,无论发出信号的是什么,都不在乎谁会收到它。但是,根据连接类型和线程,它可能会在继续之前运行插槽代码。继续Fred和Adam,我的经验是,连接几乎总是由第三方进行的,即两者的父级。或者,在可视情况下,外部窗口的命令,或者,当涉及到单例和其他管理应用程序状态的类时,主函数。感谢您的贡献,但这确实仔细阅读了问题?是的,我读得有点太快了您的问题。。。很抱歉