为什么Q_OBJECT宏会导致问题(Qt)



我在OSX Lion中运行QtCreator,每当我创建一个需要Q_OBJECT宏的类时,我在尝试构建应用程序时都会遇到错误。该类的代码如下,我收到的错误也是如此。有什么线索吗?

注意:我已经尝试过清洁、运行qmake和重建,但都无济于事。

#ifndef TASKLIST_H
#define TASKLIST_H
#include <QObject>
class TaskList : public QObject
{
    Q_OBJECT
public:
    explicit TaskList(QObject *parent = 0 );
public slots:
    void addTask();
    void displayTasks();
};
#endif // TASKLIST_H

错误:

:-1:错误:找不到体系结构x86_64 的符号

:-1:错误:collect2:ld返回1退出状态

Qt Creator中似乎仍然存在一个错误。

我有一个大项目,有很多类都有Q_OBJECT,还有一些类没有Q_OBJECT。它运行良好。然而,如果我将Q_OBJECT添加到其中一个没有它的类中,我在尝试构建它时会收到"collect2:ld return 1 exit status"错误。

检查构建目录,我发现这个类的moc文件丢失了。Qt只是没有为它创建moc文件!但是,如果我从项目中删除头文件和cpp文件并再次添加它们,它就可以工作,生成moc文件,并成功构建项目。

这个问题似乎只有在我有一个没有Q_OBJECT的类并且它在过去成功构建的情况下才会发生。在添加"Q_OBJECT"之前从未编译过的具有Q_OBJECT。

因此,如果这个问题发生了,并且您确信您正确地包含了所有内容(并且注释掉Q_OBJECT可以正确地构建项目),请执行以下操作:

  • 从项目中删除.h和.cpp文件(您刚刚在其中添加了Q_OBJECT)
  • 再次将它们添加到项目中
  • 清洁项目
  • 重新构建它

编辑

在某些情况下,运行qmake(构建/运行qmake)然后运行Clean All就足够了。

tasklist.h文件

   #ifndef TASKLIST_H
    #define TASKLIST_H
    #include <QObject>
    class TaskList : public QObject
    {
        Q_OBJECT
    public:
        explicit TaskList(QObject *parent = 0 );
    public slots:
        void addTask(){};
        void displayTasks(){};
    };
    #endif // TASKLIST_H

tasklist.cpp

   #include "tasklist.h"
    TaskList::TaskList(QObject *parent) :
        QObject(parent)
    {
    }

main.cpp

#include <QtCore/QCoreApplication>
#include "tasklist.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    TaskList t;
    return a.exec();
}

工作正常,但它应该在单独的文件

最新更新