标题:关于Q_PRIVATE_SLOT的问题
作者:davie
日期:2015-07-22 16:12
内容:
环境:windows 7 + Vs2010 +QT5.1.1
看着这个写了个例子,见附件,但总是提示
,文件见附件中,请高手帮忙看看
#1 [davie 07-22 16:40]
我发现需要在moc_MyClass.cpp文件中手动添加#include "MyClass_P.h",有没有知道怎么不用手工添加
#2 [dbzhang800 07-22 17:02]
在你的 MyClass.cpp 最后面加入 #include"moc_MyClass.cpp"
#3 回 dbzhang800 的帖子 [davie 07-23 10:11]
dbzhang800:在你的 MyClass.cpp 最后面加入 #include"moc_MyClass.cpp"
(2015-07-22 17:02)
这个我加了,不行;从stackoverflow 中的http://stackoverflow.com/questions/6605681/qt-c-forward-declaration-problem中我知道是前置声明引起的,而且生成的moc文件需要一个完整的定义,所以不行,而且我的MyclassPrivate和MyClass类是分开实现的,也有一种解决办法,把它们放在一起,但是这样就不能实现分离了。
现在我知道的唯一的可靠方案,是1楼所说的方法,期待其他方法
#4 [dbzhang800 07-23 10:39]
好吧,我下载你的源码看了一眼。
我可以肯定的告诉你,我前面说的就是就是你要的答案。
但是我看到你用的是VS的工程文件,这中间会不会有问题,我就不清楚了。比如:
你的工程文件是qmake生成的,还是VS的qt插件生成的。
你的工程文件是按我说的做之前生成的,还是之后生成的。
我个人买不起商业版的VS,所以不能亲测,也不知道VS的qt插件是否存在BUG(印象中,几年之前,国外有人抱怨过生成的vs工程文件不能正确处理这种问题)。
#5 [dbzhang800 07-23 10:48]
说实话,我不清楚你为什么要用Q_PRIVATE_SLOT这种私有宏。而且你打包的源码中,不仅包括编译中生成的中间文件,还包括 qobject_p.h 这种Qt的私有头文件【我不知道你是否清楚这意味这什么】。
言归正传:
如果你对moc的用法感兴趣的话,你可以看看我当时为QextSerialPort参与者写的:
https://github.com/qextserialport/qextserialport/blob/wiki/Three_Usage_Of_MOC.md