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等文件(如图所示),然后重新编译整个项目后,问题解决。
图一图二

发布了5 篇原创文章 · 获赞 0 · 访问量 22

猜你喜欢

转载自blog.csdn.net/darkblue2017/article/details/105506532