我用 PyQt 制作了一个项目的原型并使其在那里工作,现在我尝试将其转换为 C++,但遇到了一些问题。
如果我不放入 Q_OBJECT 宏,它会编译并运行,但如果我将其注释掉,则会出现以下错误:
Undefined symbols:
"vtable for MapView", referenced from:
MapView::~MapView()in mapview.o
MapView::~MapView()in mapview.o
MapView::MapView(QObject*)in mapview.o
MapView::MapView()in mapview.o
"MapView::staticMetaObject", referenced from:
MapView::MapView(QObject*)in mapview.o
MapView::MapView()in mapview.o
这是标题:
#ifndef MAPVIEW_H
#define MAPVIEW_H
#include <QtGui>
#include <QObject>
class MapView : public QGraphicsScene
{
//Q_OBJECT
public:
MapView();
explicit MapView(QObject *parent = 0);
QGraphicsPixmapItem *mappixmap;
~MapView();
private:
bool dragging;
float offsetX, offsetY, downoffsetX, downoffsetY;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
#endif // MAPVIEW_H
第二个问题是,如果我在这里省略 Q_OBJECT 宏,会发生不好的事情吗?
是的,我知道将 QGraphicsScene 称为“视图”是愚蠢的。
此类错误通常发生在添加Q_OBJECT
宏并忘记重新运行moc
。如果你使用qmake
, 赶紧跑make qmake
添加宏后。
至于你的第二个问题:如果没有Q_OBJECT
宏。请参阅docs有关此的更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)