本座在一个项目中同时使用咯 Qt4和Wt。 Qt4中默认是使用emit来发射信号 ;Wt内部使用的是boost来进行信号/信号槽的处理,发射信号时也是使用 emit。
代码中有这样一句 :
HostProcessFinished . emit (); //发射信号,host命令结束咯。 |
这是个 Wt风格的信号的发射语句。编译的时候 ,报告这样的错误 :
错误:expected unqualified-id before ‘(’ token |
搞咯好半天耄搞出原因 ,这种错误一般 跟头文件有关 ,经常是因为前头的某个地方少咯一个分号。本座仔细检查咯一下 ,没有哪里少分号。
正在不爽勒 , 本座又随手在 QtCreator中出错的这一句代码上点 “Ctrl+鼠标左键”跟踪进去看看,原来编译器把这个 emit解释成qobjectdefs.h中的emit宏咯。果然是关键字的冲突 。 嘿嘿 ,搞个鸟 ,总是来这一套 ,研究半天不晓得怎么囬事 ,结果随手点搞清楚咯问题 。
找 Qt文档中的相关说明,在 “信号与信号槽”一章中的 “混合使用 Qt 和第三方信号槽”小节 (英文原文见 这里 ,中文译文见 这里 ) 中有说明:
混合使用 Qt 同第三方库的信号槽机制也是可能的。你甚至可以在用一个项目中同时使用这两种机制。只需要在你的 qmake 文件(.pro)中添加下面一行: CONFIG += no_keywords 这句告诉 Qt 不要定义 moc 关键字 signals,slots 和 emit,因为这些名字可能被第三方库使用,例如 Boost。为了在定义了 no_keywords 标记之后继续使用 Qt 的信号槽,需要将你的代码中的所有 moc 关键字替换为 Qt 的宏 Q_SIGNALS(或者是 Q_SIGNAL),Q_SLOTS(或者是 Q_SLOT),以及 Q_EMIT。 |
文档里面说得很清楚咯 ,在. pro文件里加上下面这一句就行咯 :
CONFIG +=no_keywords |
HxLauncher: Launch Android applications by voice commands