Qt項目調用自定義控件動態庫,編譯時報錯error: C2491: 'QNeedleIndicator::staticMetaObject': definition of dllimport

問題描述

Qt5.8.0 MSVC編譯生成自定義控件動態庫,新建一個項目使用該自定義控件動態庫時,編譯報錯error: C2491: ‘QNeedleIndicator::staticMetaObject’: definition of dllimport()已經排除了release和debug動態庫調用混亂的問題)。

解決方法參考

解決方法參考鏈接

確實是編譯器的問題:
隱式調用的時候我們一般在工程樹中將需要的動態庫頭文件添加到工程中:
HEADERS += mainwindow.h
ScopeWidget.h
這樣導致ScopeWidget.h的全局引用,由於從QWidget繼承,所以編譯的時候會生成moc_ScopeWidget.cpp文件,導致如上錯誤。
解決辦法是將ScopeWidget.h從工程樹中移除,只在用到的地方引用。比如:
工程中需要變爲:
HEADERS += mainwindow.h
然後在ui_mainwindow.h中使用
#include “…/ScopeWidget/ScopeWidget.h”
這樣就可以了。
ScopeWidget *scopeWidget;
scopeWidget = new ScopeWidget(groupBox_4);
scopeWidget->setObjectName(QString::fromUtf8(“scopeWidget”));
以上答案得益於如下鏈接:
http://www.qtforum.org/article/26708/shared-library-compilation-error.html?s=648c17887f3ae72775fc9386fc3c403e37ca7334#post92829

問題處理

之前使用自定義控件時,直接將qneedleindicator.h導入到了項目中,現在將qneedleindicator.h從項目中移除(注意:不是徹底刪除),在.pro文件中添加INCLUDEPATH += $$PWD/. ,手動刪除項目工程目錄下release和debug目錄、Makefile、ui_mainwindow.h等文件(如圖所示),然後重新編譯整個項目後,問題解決。
圖一圖二

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