Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个信号连接到多个插槽 在我的基于C++的黑莓10应用程序中,我有一个自定义类,它使用QNETWorkAccess管理器来处理网络连接。QNetworkAccessManager对象的requestFinished(..)方法在接收到一些数据时发出信号_C++_Qt - Fatal编程技术网

将一个信号连接到多个插槽 在我的基于C++的黑莓10应用程序中,我有一个自定义类,它使用QNETWorkAccess管理器来处理网络连接。QNetworkAccessManager对象的requestFinished(..)方法在接收到一些数据时发出信号

将一个信号连接到多个插槽 在我的基于C++的黑莓10应用程序中,我有一个自定义类,它使用QNETWorkAccess管理器来处理网络连接。QNetworkAccessManager对象的requestFinished(..)方法在接收到一些数据时发出信号,c++,qt,C++,Qt,问题是,很多课外课程都对这个信号感兴趣。所以,我有很多插槽连接到这个信号。我的问题是,在这些插槽中,我可能正在做一些与UI相关的事情——因此我可能不希望一旦发出信号,所有插槽都会一直同时被调用 相反,我可能希望,在某个时间点,信号只调用一个插槽,在另一个时间点,另一个插槽,等等。有什么方法可以做到这一点 我想我可以使用不同的QNetworkAccessManager对象(如下)——但我听说不推荐使用它???e、 还有什么其他的方法???多谢各位 MyNetworkClass *network1

问题是,很多课外课程都对这个信号感兴趣。所以,我有很多插槽连接到这个信号。我的问题是,在这些插槽中,我可能正在做一些与UI相关的事情——因此我可能不希望一旦发出信号,所有插槽都会一直同时被调用

相反,我可能希望,在某个时间点,信号只调用一个插槽,在另一个时间点,另一个插槽,等等。有什么方法可以做到这一点

我想我可以使用不同的QNetworkAccessManager对象(如下)——但我听说不推荐使用它???e、 还有什么其他的方法???多谢各位

 MyNetworkClass *network1 = new MyNetworkClass();
 bool res = QObject::connect(network1, SIGNAL(signalSuccess(QVariant)), this, SLOT(CustomSLot1(QVariant)));

    MyNetworkClass *network2 = new MyNetworkClass();
 bool res = QObject::connect(network2, SIGNAL(signalSuccess(QVariant)), this, SLOT(CustomSLot2(QVariant)));

    MyNetworkClass *network3 = new MyNetworkClass();
 bool res = QObject::connect(network3, SIGNAL(signalSuccess(QVariant)), this, SLOT(CustomSLot3(QVariant)));

默认情况下,Qt应用程序只运行1个线程。这意味着任何东西都不能是异步的。当触发一个信号时,slot函数将在其他任何事件发生之前运行

如果您希望保持UI响应性并同时处理3个函数,则需要对它们执行线程。在slot函数的开头,启动一个执行实际功能的线程

Qt还具有异步功能:


您应该从同一个对象依次发出不同的信号:感兴趣的每个不同对象的信号。
通过这种方式,您可以决定顺序,并决定是向所有人发送消息还是只向某些人发送消息。

基本上就是Gjordis所说的,您必须在异步驻留
QNetworkAccessManager
的地方运行自定义类。您有两个简单的选择:

  • 或者使用调用类的异步方法
  • 在另一个线程中处理此类事件,请参阅。唯一的问题是,所提到的
    doWork()
    实际上是
    doInit()
    startWork()
    ,这取决于具体情况

在这两种情况下,仅使用信号和插槽与类交互是原始的,否则您可能会遇到异常情况。这意味着“使用者”UI线程不应该使用getter\setter。锁定不是一个好选项,因为UI线程需要执行最终阻塞操作才能获取数据。

这没有任何意义。。。所有侦听器都接收到一个信号。它也不能解决问题…@UmNyobe:当然,听众必须连接到不同的信号。。。我只是建议使用不同的信号,而不是不同的发送者(如建议的用户2054339)。。。它不必是N对N。您可以有不同级别的信号:非gui、一些gui、更多gui等。OP从未真正指出他们是否希望在初始插槽内取消剩余插槽,或者要处理的插槽集是否应该是动态的。而且,连接是动态的。您也可以断开()连接,然后稍后重新连接()。我说的。但是更华丽更详细。