我在使用Q_OBJECT宏时经常遇到问题:(我使用的是QT Creator 2.8.1 / Qt 4.8.4)之前我问过,但它似乎导致了更多麻烦。有谁能够帮我?我完全迷失了。
我有一个庞大的C ++程序,大约有50多个课程,以适应新的需求。 现在我在src-directory中的一个新目录中创建了一个新的(非常简单的)父类和3个子类。为此,我使用了模板 Qt-> Qt Designer Form Class。(我之所以这样做,因为即使我不需要* .ui文件,这也会自动实现Q_OBJECT。然后我删除了所有关于ui-File和ui文件本身))
当我运行我的程序时,我总是会得到很多“对于 ..-错误的vtable的u ndefined引用”。当我删除所有Q_OBJECT时,我的程序运行正常。但后来我无法使用以后需要的信号槽。
我在网上查了一下,发现它与我的build-directory中的.pro文件/ .o-Files有关。我(好几次)试图删除包括.pro.user在内的所有.o文件并再次编译。有时我仍然会得到错误,有时候不会。
这是我的代码(目前3个子类是相同的):
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()
{
}
我找到了手动做qmake的建议。我从未手动使用过qmake。
我是否必须在其他目录中创建课程?
我必须在+ .pro文件中添加任何其他条目
以及文件中的位置是否可以放置?
我是否必须更改makefile中的任何内容?如果是这样的话?
谢谢
答案 0 :(得分:1)
要在类中使用QOBJECT宏,您需要扩展QObject。
class MyObject: public QObject
{
Q_OBJECT
public:
MyObject (QObject *_parent);
.....
};
答案 1 :(得分:1)
如果你使用Qt Creator: 每次使用Q_OBJECT创建一个类时,
构建→运行qmake
构建→全部重建