我在使用Q_OBJECT创建类+子类时遇到了最困难的时间:
我有一个类几何和一些继承自几何的Geo_1PF,Geo_2,.. 我创建了这些类,一切运作良好.现在我想使用QMetaType,为此我需要声明Q_Object.一旦我使用Q_OBJECT/Q_DECLARE_METATYPE,我的问题就开始了.
我得到错误"未定义引用vtable for ..." 我试图在再次编译之前删除所有.o和所有moc_ .cpp.我在*.pro-File中添加了QT + = core但是我没有成功.
有人可以帮帮我吗?
这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
-
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(){}
Run Code Online (Sandbox Code Playgroud)
-
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
Run Code Online (Sandbox Code Playgroud)
Geo_1PF.cpp:#include"Geo_1PF.h"
Geo_1PF::Geo_1PF()
{
}
Run Code Online (Sandbox Code Playgroud)如果你想使用Q_OBJECT你的类应继承QObject或其子类
class Geometry : public QObject
{
Q_OBJECT
//...
Run Code Online (Sandbox Code Playgroud)