关于 qtpropertybrowser 扩展问题

https://blog.csdn.net/caoqiang2006/article/details/70795914

qtpropertybrowser  是一个基于QT开发的属性展示控件,功能强大。

在WINDOWS平台,使用VC编译工具,如果将qtpropertybrowser 此库编译成DLL时,在程序中直接使用原始类没有问题,但如果自定义派生类且使用到信号槽时就会遇到一个编译问题,这个问题归根结底在于有没有使用dllimport  特性的问题。

dllexport 和 dllimport 存储类特性是 C 和 C++ 语言的 Microsoft 专用扩展。 可以使用它们从 DLL 中导出或向其中导入函数、数据和对象。可导出类的所有基类都必须是可导出的。 否则,会生成编译器警告。 此外,同样是类的所有可访问成员必须是可导出的。 此规则只允许 dllexport类从 dllimport 类继承,dllimport 类从 dllexport 类继承(但不建议后一种方式)。 通常来说,对 DLL 客户端可访问的所有内容(根据 C++ 访问规则)都应该是可导出接口的一部分。 这包括在内联函数中引用的私有数据成员。

     QT自己扩展了C++,并提供了MOC编译工具,编译其信号-槽机制,对所有要使用QT信号槽机制的派生类有两个要求: 

  1、必须派生自QObject或QObject的子类

  2、在派生类首端添加QT的宏 Q_OBJECT, 

原因就出在Q_OBJECT中,此宏声明了一个静态数据成员:static const QMetaObject staticMetaObject; 以使用基于QT系例的库时,必须使用 dllimport 编译指令导入数据。

QT 定义了QT_DLL宏,但qtpropertybrowser的宏名称设计就不是很好,也没有提供了相应的说明,但查看源代码会发现一个名为:QT_QTPROPERTYBROWSER_IMPORT 的宏,该宏控制了QT_QTPROPERTYBROWSER_EXPORT对应的定义。

   总结:使用qtpropertybrowser的dll库,并从库中类派生子类时,编译出现“无法解析的外部符 struct QMetaObject const”的链接错误时,请在程序预编译指令中加入

QT_QTPROPERTYBROWSER_IMPORT”。


VS中添加实例:


QtCreator添加实例:


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值