指向Qt插槽的指针

2 c++ qt pointers signals-slots

我想构建一个指向Qt Slot的指针:

union {
    void (*set_slot)(unsigned long value);
    void (*refresh_slot)(void);
} the_slot;
Run Code Online (Sandbox Code Playgroud)

插槽定义是:

void set_pwm(unsigned long new_pwm);
Run Code Online (Sandbox Code Playgroud)

我尝试做这样的事情:

the_slot.set_slot = set_pwm;
Run Code Online (Sandbox Code Playgroud)

但是编译器说签名不匹配:

error:类型为void (DriverBoard::)(long unsigned int)' does not matchvoid(*)的参数(long unsigned int)'

提示:插槽位于DriverBoard类中

知道我的错误在哪里?

如果有人知道 - 是否有可能用信号做那样的事情?

谢谢!西蒙

Luk*_*ský 6

插槽和信号由它们的名称标识(当您SLOT(set_pwm(unsigned long))在代码中使用时,您正在构造一个字符串).您只需存储名称和对象,然后使用即可调用插槽QMetaObject.

可以在C++中使用指向成员函数的指针(请参阅C++ faq),但在这种情况下,我建议使用Qt的元对象系统.