2012-02-14 94 views
3

我在OSX Lion中运行QtCreator,并且随时创建需要Q_OBJECT宏的类,当我尝试构建我的应用程序时,出现错误。该类的代码如下,我收到的错误也是如此。任何线索可能会发生什么?为什么Q_OBJECT宏导致问题(Qt)?

注:我已经尝试清洗,运行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: error: symbol(s) not found for architecture x86_64

:-1: error: collect2: ld returned 1 exit status

+0

它是分开的头文件吗? – 2012-02-14 04:54:39

+0

@DmitryKachko是的,它在一个单独的文件 – finiteloop 2012-02-14 05:12:25

+1

您的.pro文件中有HEADERS + = tasklist.h? – 2012-02-14 12:52:07

回答

0

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(); 
} 

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

+0

对我来说同样的问题,多数民众赞成我是如何设置 – finiteloop 2012-02-14 05:14:55

4

目前似乎仍是Qt Creator中的错误。

我有一个大型的项目,其中有一些类都具有Q_OBJECT,而另一些类没有Q_OBJECT。它工作正常。但是,如果我将Q_OBJECT添加到其中一个没有它的类中,那么在尝试构建它时会出现“collect2:ld returned 1 exit status”错误。

检查构建目录,我看到该类的moc文件丢失。 Qt只是不会为它创建moc文件!但是,如果我从项目中删除头文件和cpp文件并再次添加它们,它将起作用,生成moc文件并成功构建项目。

只有当我有一个没有Q_OBJECT的类并且它在过去成功构建时,这个问题才会发生。在添加“Q_OBJECT”之前从未编译过的Q_OBJECT的新类总能正常工作。

因此,如果这个问题发生,你确定你正确包含一切(和注释掉Q_OBJECT让被正确建项目),请执行下列操作:

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

编辑

在某些情况下运行qmake(编译/运行qmake的),接着是Clean All就足够了。

+0

我有这个确切的问题,并通过声明'Q_PROPERTY'和重建修复它。 'Q_PROPERTY'在语法上甚至都不正确。奇 – Cobalt 2018-02-01 22:40:29

相关问题