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 " (
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 * *)" (
顯然是少了東西了,然後我就查啊查,發現就跟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檔案的生成和繼承都是自動的!!!