2017-01-10 26 views
2

我已经有了一个更大的项目和架构,并遇到了QT信号时隙系统的情况,信号非常均匀,问题如下:1.不同名称的不同信号方法如QT有条件的信号发射效率

signals: 
sig_1(bool b); 
sig_2(bool b); 
... 
sig_n(bool b); 

或: 2.冒落的差作为参数

signal: 
sig(uint n, bool b); 

并让槽方法决定如果n适合它的内部值

每个选项更糟糕的是,其他:

  1. awefull代码,我宁愿更像是一个通用的解决方案
  2. 每个时隙必须检查它是否数字将适合,所以每次的O一排(N)连接,当moc已经通过一个开关块,我们可以达到O(log n)

情况:发射器是一个微控制器的抽象,并获知输入变化。许多插槽类只有一个或两个输入连接,需要了解其变化。在结构上,发射类不应该依赖于slot-class,因此不应该保留它的监听器列表或者包含一个公共的超类或监听器接口,这就是为什么我坚持使用信号/时隙系统。

所以我的问题: sig/slot系统或moc中是否存在某种扩展或参数,或者我在这里完全错过了某些东西?

+5

如果您使用的是Qt 5和连接使用函数指针的新语法的信号和槽,槽应该被直接调用(不通过'qt_static_metacall会()'和'其之开关) 。 –

回答

0

还有一类Qt中称为QSignalMapper,帮助管理多到一个连接,但据我所知它不乙炔发生器解决了许多对许多问题

你可以试着用的想法做掉直接(发射器 - 接收器)连接,并尝试在中间使用共享数据向量。只发出一个信号(“数据更新”)。接收者将得到关于更新的通知,并且仅从共享数据对象中提取他们需要的数据(如果不担心线程安全,这可以像地图一样简单)。

如果数据向量小而且复制相对便宜,您可以直接将整个向量/映射直接发送给每个人(如上所述,在Qt5直接连接导致直接函数调用,所以这不会是全部慢)