我們已經編譯了VS2005的QT 4.6和QWT 5.2.0。Qt,VS2005,Qwt - 無法使用派生自Qwt小部件的類中的Q_OBJECT
我們試圖從QwtDial派生一個類,派生類有插槽。所以,我們需要添加Q_OBJECT宏。然而,當我們這樣做,鏈接器嗆出這個錯誤:
錯誤LNK2001:無法解析的外部符號 「公用:靜態結構QMetaObject常量QwtDial :: staticMetaObject」(?staticMetaObject @ QwtDial @@ 2UQMetaObject乙@@)
我已經看着Qwt.dll與依賴,並且它具有該功能。使用十六進制編輯器查看.lib文件顯示它具有與該名稱重疊的字符串完全匹配的內容。
我們在路徑中有Qwt庫。實際上,如果我重命名這個lib,那麼它會給出一個錯誤,它找不到這個lib文件。所以,我們知道它正在尋找正確的lib。
如果我們跳過Q_OBJECT,那麼所有東西都會使用幾個QWT小部件(包括我們的非Q_OBJECT Qwt派生類)正確鏈接和繪製。
有誰知道什麼會導致這個真煩人的鏈接器問題?
UPDATE:
我已驗證我添加了Q_OBJECT的類肯定是越來越爲其生成一個MOC文件。鏈接器錯誤實際上來自這個生成的MOC文件:
moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
([email protected]@@[email protected]@B)
因此,它看起來像是一些非常典型和非常規的東西。該符號絕對在lib中。
+1:謝謝,它幫助!我認爲,QWT中缺少定義開關。就像「如果在這個庫中使用,將QWT_DLL設置爲Q_DECL_EXPORT,否則將QWT_DLL設置爲空」。這就是爲什麼你應該設置QWT_DLL手動清空,如果使用QWT頭。 – 2011-07-05 12:53:43
謝謝,它確實有效! – 2012-04-19 13:03:19