标题:宏定义槽函数的问题
作者:thiser
日期:2018-10-19 17:15
内容:
我定义private slots: void Onxxx(); 时,消息和槽函数能够正常连接
当我定义一个宏时,
#define SLOT_DECLARE(msgname) \
private slots: void On##msgname();
再在类中使用宏声明槽函数SLOT_DECLARE(xxx);这个时候,消息在连接槽函数时,无法找到该槽函数,这是为什么呢?
#1 [dbzhang800 10-19 17:29]
信号和槽的提取,是Qt的预处理器 moc(.exe) 干的
你期望的是C++预处理器帮帮你生成合适的槽函数名,而后moc再提取信号和槽
但是,
moc预处理必须在C++的预处理器工作之前进行(不然private slots中的slots等空的宏直接就被C++预处理变成空白了,moc彻底没法工作了)。
#2 [thiser 10-19 18:14]
那有没有什么可以解决这个问题呢?比如重新更改moc的代码,编译生成moc.exe?
#3 [ustone 10-21 10:18]
楼主这个必要性在哪里呢?
#4 [笑颜 10-22 08:55]
Qt那么多connect,换一个就解决问题。