为什么我会收到 QGraphicsPolygonItem 重新实现的 moc 错误
Why am I getting moc errors for QGraphicsPolygonItem reimplementation
请帮帮我!我正在进行一个小型个人项目,我需要某种 node editor。为此,我必须定义继承自 QGraphicsPolygonItem
class 的 Individual
class。我尽可能地简化了代码以便能够识别错误但无济于事。我收到 MOC(元对象编译器)错误,老实说我不明白(我们在某种程度上都是新手)。还有,网上什么也没有,你是我不得已的办法
这里是 Individual
class 定义:
#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();
}
最后 错误 我得到了 evrytime:
因为 QGraphicsPolygonItem
是 QGraphicsItem
而不是 QObject
。您可以使用 C++ 的多重继承特性,使 Individual
class 同时由
Individual : public QObject, public QGraphicsPolygonItem
{
...
并且不要忘记为 Individual
ctore 调用 QObject ctor。
现在,我建议您也阅读 this question and the answers。
请帮帮我!我正在进行一个小型个人项目,我需要某种 node editor。为此,我必须定义继承自 QGraphicsPolygonItem
class 的 Individual
class。我尽可能地简化了代码以便能够识别错误但无济于事。我收到 MOC(元对象编译器)错误,老实说我不明白(我们在某种程度上都是新手)。还有,网上什么也没有,你是我不得已的办法
这里是 Individual
class 定义:
#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();
}
最后 错误 我得到了 evrytime:
因为 QGraphicsPolygonItem
是 QGraphicsItem
而不是 QObject
。您可以使用 C++ 的多重继承特性,使 Individual
class 同时由
Individual : public QObject, public QGraphicsPolygonItem
{
...
并且不要忘记为 Individual
ctore 调用 QObject ctor。
现在,我建议您也阅读 this question and the answers。