【发布时间】:2017-05-24 23:07:26
【问题描述】:
我在使用 Q_OBJECT 创建类+子类方面遇到了最困难的时期:
我有一个类 geometry 和一些继承自几何的类 Geo_1PFem>、Geo_2、..。我创建了这些类,一切运行良好。现在我想使用 QMetaType,为此我需要声明 Q_Object。 一旦我使用了 Q_OBJECT / Q_DECLARE_METATYPE 我的问题就开始了。
我收到错误“未定义对 vtable 的引用...” 我试图在再次编译之前删除所有 .o 和所有 moc_.cpp。我在 *.pro-File 中添加了 QT += core 但没有成功。
- 我必须将 Q_OBJECT / Q_DECLARE_METATYPE 放在父类和子类中吗?
- 为什么会出现该错误?
有人可以帮帮我吗?
这是我的代码:
geometry.h:
#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QMetaType>
#include <QWidget>
#include <QObject>
#include <QDebug>
class Geometry
{
// Q_OBJECT
protected:
public:
Geometry();
virtual ~Geometry(void) {}
virtual void write_LNE();
//Q_DECLARE_METATYPE(Geometry);
#endif // GEOMETRY_H
-
geometry.cpp:
#include "geometry.h"
Geometry::Geometry()
{ qDebug() << "Constructor: hier ist Geometry"; }
void Geometry::Haupt()
{ qDebug() << " Das hier ist die Haupt von Geometry ....." ; }
void Geometry::write_LNE(){}
-
Geo_1PF.h:
#ifndef GEO_1PF_H
#define GEO_1PF_H
#include "geometry.h"
class Geo_1PF : public Geometry
{
// Q_OBJECT
public:
Geo_1PF();
~Geo_1PF() {}
virtual void write_LNE();
};
//Q_DECLARE_METATYPE(Geo_1PF);
#endif // GEO_1PF_H
-
Geo_1PF.cpp: #include "Geo_1PF.h"
Geo_1PF::Geo_1PF() { }
【问题讨论】: