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

结构是这样的:

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

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

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

最佳答案

两者之间没有区别

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);

关于c++ - Qt/C++基于比较的信号分配的优雅方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56124162/

10-12 14:20
查看更多