【发布时间】:2017-01-13 08:52:42
【问题描述】:
我在使用 Q_OBJECT 宏时经常遇到问题:(我使用 QT Creator 2.8.1 / Qt 4.8.4)我之前问过,但这似乎会导致更多麻烦。有谁能够帮助我?我完全迷路了。
我有一个庞大的 C++ 程序,其中包含大约 50 多个类来适应新的需求。 现在我在 src 目录的一个新目录中创建了一个新的(非常简单的)父类和 3 个子类。为此,我使用了模板 Qt->Qt Designer Form Class。(我这样做是因为即使我不需要 *.ui 文件,它也会自动实现 Q_OBJECT。然后我删除了所有有关 ui -文件和 ui 文件本身))
当我运行我的程序时,我总是得到很多“undefined reference to vtable for” ..-errors。当我删除所有 Q_OBJECT 时,我的程序运行正常。但是我无法使用以后需要的信号槽。
我在互联网上查找了它,发现它与我的构建目录中的 .pro-file/.o-Files 有关。我(多次)尝试删除所有 .o-Files 包括 .pro.user 并再次编译。有时我仍然得到错误,有时没有。
这是我的代码(目前 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。
- 我如何以及从哪个目录执行此操作?我到底要写什么 qmake ......?
- 使用模板Qt->Qt Designer Form Class来创建这些类是否正确?
我必须在另一个目录中创建类吗?
我需要在 +.pro 文件中添加其他条目吗
它们必须放在文件的什么位置?
我必须更改我的 makefile 中的任何内容吗?如果是这样呢?
谢谢
【问题讨论】:
标签: qt