使用Q_OBJECT宏时,我经常遇到问题:(我使用QT Creator 2.8.1 / Qt 4.8.4),但我之前询问过,但这似乎导致了更多的麻烦。有谁能够帮我?我完全迷路了。
我有一个庞大的C ++程序,其中包含约50多个类,以适应新的需求。现在,我在src目录中的新目录中创建了一个新的(非常简单的)父类和3个子类。为此,我使用了模板Qt-> Qt Designer表单类。(我这样做是因为即使我不需要* .ui文件,它也会自动实现Q_OBJECT。然后,我删除了所有与ui文件有关的内容以及ui文件本身。)
当我运行程序时,我总是会得到很多“ .v错误定义的对vtable的未定义引用”。当我删除所有Q_OBJECT时,我的程序运行正常。但是后来我无法使用以后需要的信号槽。
我在互联网上查询了它,发现它与我的构建目录中的.pro-file / .o-Files有关。我(几次)试图删除包括.pro.user的所有.o文件,然后再次编译。有时我仍然会收到错误,有时却没有。
这是我的代码(这三个子类目前是相同的):
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-File中添加任何其他条目吗?
并在文件中将它们放置在文件中的什么位置?
我是否需要更改makefile中的任何内容?如果是这样呢?
谢谢
要在您的类中使用QOBJECT宏,您需要扩展QObject。
class MyObject: public QObject
{
Q_OBJECT
public:
MyObject (QObject *_parent);
.....
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句