2010-06-10 106 views
1

使用Qt Creator的,我在Qt中創建自定義插槽類:未定義的引用鏈接錯誤與信號和槽

 

class CustomEdit : public QTextEdit 
{ 
    Q_OBJECT 

public: 
    CustomEdit(QWidget* parent); 

public slots: 
    void onTextChanged(); 
}; 
 

不過,我得到這個連接錯誤:

undefined reference to 'vtable for CustomEdit' 

該文件說:

if you get compiler errors along the lines of "undefined reference to vtable for LcdNumber", you have probably forgotten to run the moc or to include the moc output in the link command.

...但它並不明顯是什麼意思。

有什麼我需要添加到我的課,或.pro文件?

編輯 - 這是我的.pro文件:

 
QT += network \ 
    script \ 
    webkit \ 
    xml 
TARGET = MyApp 
TEMPLATE = app 
SOURCES += main.cpp \ 
    MainWindow.cpp \ 
    CustomEdit.cpp 
HEADERS += MainWindow.h \ 
    CustomEdit.h 
FORMS += mainwindow.ui 

編輯:

This question涉及同樣的問題,但答案沒有說清楚怎麼可以在Qt Creator中修復這個問題。我是否需要將moc生成的.cpp文件顯式添加到要鏈接的文件列表中?這似乎是一種痛苦。

+0

發佈您的.pro文件。 – 2010-06-10 01:29:59

+0

你試過在SO裏搜索嗎? ;-) http://stackoverflow.com/questions/1552069/undefined-reference-to-vtable-trying-to-compile-a-qt-project – Jujjuru 2010-06-10 01:35:31

+0

謝謝,但我沒有運行qmake,我正在使用Qt造物主 – 2010-06-10 01:39:05

回答

2

Qt creator是一個用來創建你的Qt項目的IDE。就這樣。但qmake可以讓你建立這個項目。從qmake manual,

qmake自動生成Makefiles,以便只需要幾行信息來創建每個Makefile。 qmake根據項目文件中的信息生成Makefile。 qmake包含支持Qt開發的附加功能,自動包含moc和uic的構建規則。

你不必分開包含你的moc文件,但你必須運行qmake,其中包含所有有關所需moc文件的信息。看看qmake後產生的Makefile.debugMakefile.release,你可以找到所有的moc文件。

現在要在Qt創建器中運行qmake,只需轉到Build->RebuildAll即可運行qmake,並且所有(moc)文件也將生成並鏈接(在Makefile.debug中)。

希望這會使您的未定義參考變得更加靈活。

+0

它的確如此,謝謝。我也意識到,當我在Qt Creator中創建一個新類時,我必須指定「Inherits QWidget」作爲類型信息。看起來很奇怪,因爲我已經告訴IDE我的類是從Qt類派生出來的,所以我不得不明確地指定它,但這確實有用。 – 2010-06-11 05:58:52

相關問題