• 4162阅读
  • 6回复

制作自定义控件时碰到的一个问题,求大神解答 [复制链接]

上一主题 下一主题
离线fu22507411
 

只看楼主 倒序阅读 楼主  发表于: 2017-03-24
环境是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 中定义


如何解决这个问题呢?
邮箱jiahao_coffee@foxmail.com 有问题可以免费咨询,有空都会回答,不过太难了我答不上来不要介意哈
离线fu22507411

只看该作者 1楼 发表于: 2017-03-24
liudianwu前辈写了那么多自定义控件,不知道有没有碰到这个问题呢?
本帖提到的人: @liudianwu
邮箱jiahao_coffee@foxmail.com 有问题可以免费咨询,有空都会回答,不过太难了我答不上来不要介意哈
离线fu22507411

只看该作者 2楼 发表于: 2017-03-25
问题解决啦
说一下解决的思路吧:
首先想到的是这个功能Qt肯定是支持的,不然点designer的菜单“帮助->关于插件”,就不会有树形结构来显示用户自定义插件了。
之后我便想到了QWT是开源的,去装好后果然一个动态库里就有各式各样的控件


接下来就是啃代码<( ̄︶ ̄)>
我找到了QWT的plugin的代码,原来是用了QDesignerCustomWidgetCollectionInterface来实现的,每个单独的plugin都不需要Q_PLUGIN_METADATA 这个宏,只需要在QDesignerCustomWidgetCollectionInterface包含就行了。照着QWTplugin写好后,果然能编译通过了,真开心。折腾到1点半,自己摸索还是很耗时间的啊。。。希望后来人不用走弯路了。
邮箱jiahao_coffee@foxmail.com 有问题可以免费咨询,有空都会回答,不过太难了我答不上来不要介意哈
离线beiqibing

只看该作者 3楼 发表于: 2017-03-27
离线liuchangyin

只看该作者 4楼 发表于: 2017-03-28
离线renzhihe

只看该作者 5楼 发表于: 2017-03-29

离线return

只看该作者 6楼 发表于: 2017-03-29
    
快速回复
限100 字节
 
上一个 下一个