【发布时间】:2017-01-10 11:30:54
【问题描述】:
我已经有一个更大的项目和架构,并且遇到了 QT 信号槽系统具有非常同质的信号和问题:1. 要么有许多不同名称的不同信号方法,比如
signals:
sig_1(bool b);
sig_2(bool b);
...
sig_n(bool b);
或: 2. 发出差异作为参数
signal:
sig(uint n, bool b);
让 slot 方法决定 n 是否适合它的内部值
每个选项都比另一个更糟糕:
- 很棒的代码,我更喜欢通用解决方案
- 每个插槽都必须检查它的编号是否合适,所以每次 O(n) 连接的一行,当 moc 已经通过一个我们可以达到 O(log n) 的开关块时
情况:发射器是一种微控制器抽象,可获知输入变化。许多插槽类只有一个或两个输入连接,需要了解它们的变化。从结构上讲,发射类不应依赖于插槽类,因此不应保留其侦听器列表或包含侦听器的通用超类或接口,这就是我坚持使用信号/插槽系统的原因。
所以我的问题: 在 sig/slot 系统或 moc 中是否有某种扩展或参数,或者我在这里完全错过了什么?
【问题讨论】:
-
如果您使用 Qt 5 并使用带有函数指针的新语法连接信号和插槽,则应直接调用插槽(无需通过
qt_static_metacall()及其switch)。跨度> -
感谢本杰明,这让事情变得更糟了,因为现在没有实例,只是直接链接的汇编代码,没有要排序的实例。至少每个听众的检查时间都变短了。
-
更糟?我不明白。
-
因为之前至少有一个实例能够将输入映射到输出,所以现在它是硬连线的。在 sig-slot 系统的情况下,这是一个巨大的性能优势。
标签: c++ qt signals-slots qt-signals