1. 程式人生 > >Qt中moc問題 qt moc 處理 cpp

Qt中moc問題 qt moc 處理 cpp

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

Qt編譯常見的錯誤:

編譯報錯:

1>Linking...

1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall cmmwindow::metaObject(void)const " (

[email protected]@@[email protected]@XZ)

1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall cmmwindow::qt_metacast(char const *)" ([email protected]@@[email protected])

1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall cmmwindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (

[email protected]@@[email protected]@@[email protected])

 

     顯然是少了東西了,然後我就查啊查,發現就跟Q_OBJECT這個巨集有關。我用的是QT Designer,一般只有用到訊號和槽時才會用到MOC,因為採用訊號和槽是Qt的特性,而C++沒有,所以採用了MOC(元物件編譯器)把訊號和槽部分編譯成C++語言。好,我們就用

moc mainwindow.h  –o moc_mainwindow.cpp

生成moc_mainwindow.cpp檔案並加入工程。再次編譯通過。

 

     由於用的是QT Designer,一般只有用到訊號signals和槽slots時才會用到MOC,因為採用訊號signals和槽slots是QT的特性,而C++沒有,所以採用了MOC(元物件編譯器)把訊號signals和槽slots部分編譯成C++語言。
用訊號signals和槽slots需注意的基本問題是:
(1)、在類class宣告中必須加入Q_OBJECT;
(2)、在CPP檔案中要把訊號signals和槽slots聯絡起來,即使用connect,例connect( iv, SIGNAL(clicked (QIconViewItem *)), this, SLOT( draw()));

再次強調:只要按上述方式就行了,因為MOC檔案的生成和繼承都是自動的!!!

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述