Qt中moc问题(qt moc 处理 cpp)
Qt編譯常見的錯誤:
編譯報錯:
1>Linking...
1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall cmmwindow::metaObject(void)const " (?metaObject@cmmwindow@@UBEPBUQMetaObject@@XZ)
1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall cmmwindow::qt_metacast(char const *)" (?qt_metacast@cmmwindow@@UAEPAXPBD@Z)
1>cmmwindow.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall cmmwindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@cmmwindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
?
???? 顯然是少了東西了,然后我就查啊查,發現就跟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文件的生成和繼承都是自動的!!!
總結
以上是生活随笔為你收集整理的Qt中moc问题(qt moc 处理 cpp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Linux的修复(重新引导)
- 下一篇: qsort函数简介