我正在一个项目中,我通过UDP接收到一条消息,并且基于该消息,我发出了不同的信号,并且它们都具有相同的参数。
结构如下:
if(command_type == COMMAND_TYPE_MOVE)
{
emit sigMoveForward(data);
}
else if(command_type == COMMAND_TYPE_STOP)
{
emit sigStopMove(data);
}
当经过10条命令时,这对于编程和维护来说确实非常繁琐。有办法更好地做到这一点吗?
我想创建一个QMap并对其进行查找并发出我得到的信号。在Qt中有没有可能指向该函数的指针并以这种方式忽略它?
答案 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