用于对象间通信的Qt信号和时隙的替代方案
Alternatives to Qt Signals and Slots for Inter-Object Communication
除了使用类似Qt的信号和插槽在两个对象(类实例(之间双向通信之外,还有什么替代方案?
我知道这可以通过在每个对象中保存另一个对象的引用来实现。然而,当存在许多不同的对象,并且所有对象都应该相互交互(从而了解(时,这会有点令人困惑。
我遇到的另一个问题是Qt信号和插槽是如何在内部实现这种对象间通信的(简单概述一下内部事件过程会很有帮助(?
下面是我所说的一个Qt例子。对象c和d都可以发出连接到另一个插槽的信号。
class Chicken : public QObject
{
Q_OBJECT
public:
Chicken() = default;
public slots:
void helloBackDuck() {
std::cout << "Hello Back Duck" << std::endl;
}
signals:
void helloDuck();
};
class Duck : public QObject
{
Q_OBJECT
public:
Duck() = default;
public slots:
void helloBackChicken() {
std::cout << "Hello Back Chicken" << std::endl;
}
signals:
void helloChicken();
};
int main() {
Chicken c;
Duck d;
connect(&c, &Chicken::helloDuck, &d, &Duck::helloBackChicken);
connect(&d, &Duck::helloChicken, &c, &Chicken::helloBackDuck);
}
Qt信号和插槽机制是Qt程序中的最佳选择,但如果您想了解其他选项,您可以使用以下选项:
-
你可以开发自己的观察者结构,就像Qt信号和槽一样,但你应该从一开始就自己发明轮子。
您应该创建一个Observe类和一个Subject类。一开始,通过将Observer的引用传递给Subject来连接Observer,一旦条件满足,Subject就会调用所有实例的更新函数(emit(。
有关更多解释,请查看此链接。
-
另一种选择是使用Boost signal2,它也类似于Qt信号槽,但来自第三方库。用法类似于Qt信号。
要了解更多解释,请查看此。
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在Visual Studio 2017中使用c ++组件构建python解决方案时出现问题
- 在 Visual Studio 解决方案中设置所有项目的运行时库
- 自上而下的动态规划与递归朴素解决方案.检查运行时执行
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- win10 尝试在我运行它时寻找问题的解决方案
- 我在运行这个黑客排名 Gridland 地铁的解决方案时遇到分段错误
- 将单元测试添加到旧解决方案时出现链接错误
- CPLEX - 访问解决方案C++时出错
- STXXL的任何STXXL替代方案都可以在编译时处理未知大小或任何技巧
- QT信号和时隙将变量传递到另一种形式
- Qt时隙方法(这是另一类)在发射信号时不触发
- 编译时解决方案以检测特征对象没有eval()成员
- Qt:有没有什么方法可以调用具有一定时间间隔的时隙序列
- 通过信号和时隙系统调用类函数
- Qt:LNK2001和LNK2019 跨源文件实现信号/时隙后会出现错误
- boost::信号2;没有用于添加信号时隙的匹配功能
- Qt5 信号/时隙语法,带过载信号和 lambda
- C++对象实例化数组(我正在尝试找到编译时解决方案)
- Qt在网络上的信号/时隙机制