首页 > 解决方案 > 为什么我收到 QGraphicsPolygonItem 重新实现的 moc 错误

问题描述

请帮我!我正在进行一个小型个人项目,我需要某种节点编辑器。为此,我必须定义从Individual该类继承的QGraphicsPolygonItem类。我尽可能简化了代码以便能够识别错误,但无济于事。我遇到了我真的不明白的MOC(元对象编译器)错误(我们在某种程度上都是新手)。此外,网络上没有任何关于它的内容,你是我最后的手段。

这是Individual类定义:

#ifndef INDIVIDUAL_H
#define INDIVIDUAL_H

#include <QGraphicsPolygonItem>
#include <QGraphicsTextItem>
#include <QPainterPath>

class Individual : public QGraphicsPolygonItem
{
    Q_OBJECT
public:
    Individual(QString p_fName, QString p_lName,QGraphicsItem* parent = 0);

};

#endif // INDIVIDUAL_H

这是它的实现:

#include "individual.h"

Individual::Individual(QString p_fName , QString p_lNamen, QGraphicsItem* parent)
    :QGraphicsPolygonItem(parent)

{

    QPainterPath temp_path;
    temp_path.addRoundRect(0,0,100,50,10,10);
    setPolygon(temp_path.toFillPolygon());
}

然后在 main.cpp (简单地说)我写了这样的东西:

#include "widget.h"
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <individual.h>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setMinimumSize(800,600);
    
    QGraphicsView view(&w);
    view.setMinimumSize(800,600);
    
    QGraphicsScene scene;
    Individual myPoly("My","Name"); // The arguments are not used for now just kept them there in case
    scene.addItem(&myPoly);

    view.setScene(&scene);

    w.show();
    return a.exec();
}

最后我得到的错误:

在此处输入图像描述

标签: qtqgraphicsitem

解决方案


因为QGraphicsPolygonItem是 aQGraphicsItem而不是 a QObject。您可以使用 C++ 的多重继承功能,Individual通过

 Individual : public QObject, public QGraphicsPolygonItem
{
...

并且不要忘记为Individualctore 调用 QObject ctor。

现在,我应该建议你阅读这个问题和答案


推荐阅读