重实现QGraphicsPolygonItem类时出现MOC错误该如何解决?
问题根因
你遇到的MOC错误由两个问题导致:
- 核心问题:
Q_OBJECT宏只能用于继承自QObject的类,而QGraphicsPolygonItem本身不属于QObject派生类,你在Individual类中添加了Q_OBJECT宏但父类不满足要求,触发MOC编译失败。 - 次要笔误:实现文件中构造函数的第二个参数名写错,头文件中定义为
p_lName,cpp文件中误写为p_lNamen,后续也会导致参数不匹配报错。
解决方案
方案1(不需要Qt元对象功能时推荐)
直接删除Individual类定义中的Q_OBJECT宏即可解决MOC报错,如果你不需要用到信号槽、属性系统等Qt元对象相关能力,优先选这个方案,改动最小。
方案2(需要用到信号槽等元对象功能时选择)
修改类定义为多继承,将QObject放在继承列表的第一位:
class Individual : public QObject, public QGraphicsPolygonItem { Q_OBJECT public: Individual(QString p_fName, QString p_lName,QGraphicsItem* parent = 0); };
额外注意
- 修正cpp文件中构造函数的参数名笔误,把
p_lNamen改为p_lName - 修改完成后先执行
qmake,再重新编译,涉及MOC的变更必须重新运行qmake才能生效,必要时可以清理构建目录后再编译。
内容的提问来源于stack exchange,提问作者Med Okl
相关产品推荐
相关产品推荐

