Qt slot 鏈接問題

 

1.問題: QGLViewer中的函數不能正常link.

解決: 翻看其源代碼,發現是因爲從源碼安裝libQGLViewer時,編譯用了Qt 3,而我的程序中用Qt4 編譯.所以必須重新用Qt4編譯.

但是,更改QTDIR 環境變量爲Qt4後,重新編譯的話,qmake生成makefile時就提示出錯.進一步發現,是因爲雖然設了QTDIR爲Qt4,頭文件和庫文件都會使用Qt4,但是moc,uic等都是用的qt3版的,再把PATH環境變量改動後,一切ok.

2.問題:某一個類中如果加入Q_OBJECT後,則link時提示:undefined reference to vtable for "xxx::xxx".刪掉它則沒有任何問題.

解決:嘗試(1):把所有的obj文件和uic文件刪除,重新編譯.仍然失敗.

去trolltech的mail lists找到原因: 因爲qmake生成Makefile的時候,這個類的頭文件中並沒有Q_OBJECT,所以在相應的Makefile裏面並沒有用moc xxx.h命令,最終導致鏈接失敗.重新運行qmake,問題解決.

在查找解決方法的時候,附帶發現一點:

qmake不會處理.cpp文件裏的Q_OBJECT,所以,如果在.cpp文件中有它的話,也會產生undefined reference to vtable for "xxx::xxx". 這時,需要先用moc xxxx.cpp生成相應的moc文件,再包含到.cpp裏面去,才能解決這個問題.

3. 看Qt的reference發現: 可以connect(pObjA, SIGNAL(someSignalA()),pObjB,SIGNAL(someSignalB()));這樣pObjA發出的someSingalA會導致pObjB發出someSignalB,從而形成信號接力.

 

 

 

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