QT自定義控件“undefined reference to 'vtable for'”問題

由於要在控件中繪圖,用到自定義控件,在自定義控件中實現繪製圖形功能。

 

在wavewidget.h文件中定義類如下。

class WaveWidget:public QWidget
{
    Q_OBJECT
public:
    WaveWidget(QWidget *parent = 0);
    WaveWidget(int width = 0,int height = 0,QWidget *parent = 0);

protected:
    void paintEvent(QPaintEvent * e);
};


一直編譯不通過,提示“undefined reference to 'vtable for'”錯誤,查遍了書籍,沒有發現語法錯誤,去掉“Q_OBJECT”就能編譯通過。但是要用到消息和槽機制,不能屏蔽掉它。
通過查看錯誤信息,認爲是.o文件問題,清除*.o文件,重新構建項目,刪除debug文件夾等手段,依舊不能解決問題。糾結了很久。
最終查找資料發現,原因是moc沒有更新導致,更新*.pro文件,重新qmake一下,順利解決。


出現此問題的原因是:

預編譯器打開宏Q_OBJECT,聲明若干個由moc處理(implement)的成員函數。假如得到類似於“undefined reference to vtable for LcdNumber”的編譯錯誤,可能是忘記了執行moc,或忘記了將moc輸出加入到link命令裏。qmake生成Makefile的時候,這個類的頭文檔中並沒有Q_OBJECT,所以在相應的Makefile裏面並沒有用moc xxx.h命令,最終導致鏈接失敗.

 

問題總結:
在QT中,遇到有些不可思議的問題,可以從qmake、*.pro、Makefile中入手,說不定就是這其中某個語句錯誤引起。

 
感謝博主的分享,網址如下。
<a target=_blank href="http://blog.chinaunix.net/uid-25749806-id-2942348.html">http://blog.chinaunix.net/uid-25749806-id-2942348.html</a>
 

感概:
QT的機制還是有問題,出現此類找不到原因的問題,要解決掉還真花時間啊。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章