2012-02-14 88 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

相關問題