标题:制作自定义控件时碰到的一个问题,求大神解答
作者:fu22507411
日期:2017-03-24 23:14
内容:
环境是QT5.6+VS2013
制作自定义控件时,要在plugin类中添加宏:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")但是如果一个项目中如果要写两个自定义控件,这个宏就会冲突
假设我们在一个项目中写了MyLabel和MyButton两个自定义控件,都在各自的plugin类中添加Q_PLUGIN_METADATA这个宏的话,
编译报错:
1>moc_MyButtonPlugin.obj : error LNK2005: _qt_plugin_instance 已经在 moc_MyLabelPlugin.obj 中定义
1>moc_MyButtonPlugin.obj : error LNK2005: _qt_plugin_query_metadata 已经在 moc_MyLabelPlugin.obj 中定义
如何解决这个问题呢?
#1 [fu22507411 03-24 23:16]
liudianwu前辈写了那么多自定义控件,不知道有没有碰到这个问题呢?
#2 [fu22507411 03-25 01:46]
问题解决啦
说一下解决的思路吧:
首先想到的是这个功能Qt肯定是支持的,不然点designer的菜单“帮助->关于插件”,就不会有树形结构来显示用户自定义插件了。
之后我便想到了QWT是开源的,去装好后果然一个动态库里就有各式各样的控件
接下来就是啃代码
我找到了QWT的plugin的代码,原来是用了QDesignerCustomWidgetCollectionInterface来实现的,每个单独的plugin都不需要Q_PLUGIN_METADATA 这个宏,只需要在QDesignerCustomWidgetCollectionInterface包含就行了。照着QWTplugin写好后,果然能编译通过了,真开心。折腾到1点半,自己摸索还是很耗时间的啊。。。希望后来人不用走弯路了。
#3 [beiqibing 03-27 08:45]
#4 [liuchangyin 03-28 21:11]
#5 [renzhihe 03-29 09:04]