gpt4 book ai didi

c++ - 将一个信号连接到多个插槽

转载 作者:行者123 更新时间:2023-11-28 03:22:53 25 4
gpt4 key购买 nike

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

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

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

我认为我可以做的是使用不同的 QNetworkAccessManager 对象(如下)——但我听说不推荐这样做???例如,还有什么其他方法???谢谢。

 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 个线程。这意味着没有什么是异步的。当一个信号被触发时,插槽函数会在其他任何事情发生之前运行。

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

http://doc.qt.digia.com/stable/thread-basics.html

Qt也有异步函数:

http://doc.qt.digia.com/stable/qtconcurrentrun.html

关于c++ - 将一个信号连接到多个插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com