Qt / C ++基于比较的信号分配的优雅方式

时间:2019-05-14 06:23:22

标签: c++ qt signals

我正在一个项目中,我通过UDP接收到一条消息,并且基于该消息,我发出了不同的信号,并且它们都具有相同的参数。

结构如下:

if(command_type == COMMAND_TYPE_MOVE)
{
    emit sigMoveForward(data);
}
else if(command_type == COMMAND_TYPE_STOP)
{
    emit sigStopMove(data);
}

当经过10条命令时,这对于编程和维护来说确实非常繁琐。有办法更好地做到这一点吗?

我想创建一个QMap并对其进行查找并发出我得到的信号。在Qt中有没有可能指向该函数的指针并以这种方式忽略它?

2 个答案:

答案 0 :(得分:4)

之间没有区别
emit sigMoveForward(data);

sigMoveForward(data);

因此,如果命令是连续的,则可以使用指向信号的指针或更简单的数组来创建QMap。不过,它的语法非常棘手。

void (Your_class::*signals[COMMAND_COUNT])(your_data_type) ;
...
signals[COMMAND_TYPE_MOVE] = &Your_class::moveForward;
signals[COMMAND_TYPE_STOP] = &Your_class::stopMove;
....

并像这样发出它:

(this->*signals[command_type])(data);

答案 1 :(得分:0)

如果所有信号都包含相同的data,则可以发送包含2个参数(command_type + data)的唯一信号,然后在接收槽

command_type