目录html
原文连接:属性浏览器控件QtTreePropertyBrowser编译成动态库(设计师插件)浏览器
上一篇文章超级实用的属性浏览器控件--QtTreePropertyBrowser讲了怎么去编译QtTreePropertyBrowser库,而且能够简单实用。因为我下载的库是基于Qt4的版本,因此编译起来也费劲巴拉的,改了很久的源码才编译经过。app
本篇文章咱们核心讲解的是怎么把这个库编译成动态库,让别的模块去动态调用。编辑器
这里引入Qt官方维护的模块QtSolutions,里边就包含了QtTreePropertyBrowser这个项目,最关键是Qt5能够直接编译经过。ide
QtSolutions里边不只仅有QtTreePropertyBrowser这个项目,并且包含了多个有用模块,文章最后会简单作以介绍。工具
下面咱们主要仍是围绕QtTreePropertyBrowser这个库来进行讲解。。学习
编译成动态库的方式有2种,一种是命令行,另外一种是vs工具,其实本质上都是同样的,都是使用了msvc编译器。测试
若是想要使用其余编译器编译,本篇文章能够做为参考,可能有些地方不太实用。this
编译这种长期维护的项目,咱们首先就是去看代码中的文档说明,通常都会有编译步骤。lua
这个库也不例外,看上图中红色款圈出来的部分,就是咱们编译的步骤,简单吧。
configure.bat,若是须要生成动态库则须要添加
-library
参数
命令行cd到源码根目录,执行如下步骤便可
没有什么悬念,代码应该能够正常编译经过,这里就不作过多解释。
重点看下怎么使用vs工具进行编译
首先在网上随便搜索下pro转sln工程的文章,总结一下就是下面两句话
qmake xxx.pro qmake -tp vc -r
对于咱们的qtpropertybrowser代码可能就像下面这样
qmake qtpropertybrowser.pro qmake -tp vc -r
若是不使用这种方式,也可使用vs-addin插件直接打开pro文件
执行完上述两句话以后,会发现咱们的根目录下多了一个qtpropertybrowser.sln工程文件。每个项目文件夹下也多了一个simple.vcxproj项目文件。
接下来就是用vs打开qtpropertybrowser.sln工程文件,而后进行编译了。
经过命令行生成的QtSolutions_PropertyBrowser-head.vcxproj这个工程文件有一些小问题,须要修改下工程配置,不然编译会失败。
打开工程属性 -> C/C++ -> 预处理器 -> 预处理器定义项。
修改QT_QTPROPERTYBROWSER_IMPORT宏为QT_QTPROPERTYBROWSER_EXPORT
而后编译,动态库的编译结果以下图,其余测试程序这里没有放出来。
根据INSTALL.txt说明文件,尝试以下两种操做均失败
assustant -addContentFile xxx.dcf
添加,报错。后来无心中看到了一片文章建立文档和自定义的qt assistant,讲怎么生成Qt帮助文档的,发现其中有根据qhp文件生成qch文件的方式,尝试了下,竟然能够。
操做步骤以下:
对于咱们的qtpropertybrowser代码,可能会像下面这样。首先进入doc\html目录下,而后执行以下操做
第二步也能够经过工具来添加,如上图所示。编辑菜单 -> 首选项,选中文档页签,添加本身的qch文件便可。
搜索页签下输入"QtPro",搜索到结果QtProperty,以下图所示,表示咱们的文档集成成功。
动态库都有了,设计师插件还会远吗?
本身写一个Qt插件,把须要导入到desinger中的控件都注册进来便可。
大体流程以下
WidgetInterface类继承自QDesignerCustomWidgetInterface,WidgetInterface类包含了一些默认行为,这里就不贴出来了。
class TreeBrowserInterface : public WidgetInterface { Q_OBJECT Q_INTERFACES( QDesignerCustomWidgetInterface ) public: TreeBrowserInterface(QObject * parent); virtual QWidget * createWidget( QWidget * parent ) override; };
WidgetCollectionInterface::WidgetCollectionInterface( QObject * parent /*= nullptr */ ) : QObject(parent) { d_plugins.append(new QPB::TreeBrowserInterface(this)); d_plugins.append(new QPB::ButtonBrowserInterface(this)); d_plugins.append(new QPB::GroupBoxBrowserInterface(this)); }
生成的设计师动态库拷贝到Qt安装目录下,具体目录为和bin同级plugins目录下的designer文件夹中
从新启动设计师后,Widget Box列表中多了3个控件。
一切准备就绪,剩下的就是本身玩儿了
关于怎么写设计师插件,不是本文的重点,想学习的同窗直接去百度便可
qt-solutions是一个Qt官方维护的开源库,其中有8个项目,QtTreePropertyBrowser就是咱们今天讲到的其中一个。
这个8个模块以下列表:
属性浏览器控件QtTreePropertyBrowser的运行效果,能够到超级实用的属性浏览器控件--QtTreePropertyBrowser这篇文章中查看。
有人说,Qt.Soluations这个库的代码时基于Qt4写的,并且最后的测试时间也是Qt4.4,最好使用Qt新版本的qtpropertybrowser代码,这里我本身也进行了测试,直接把Qt5的代码覆盖当前版本的代码,编译也是能经过的,惟一比较坑的一点就是不能做为动态库使用了。
而后我就屁颠屁颠的,把全部须要导出的类都添加了导出宏,手都给我加酸了。
随着后续对这个控件的使用,具体细节上的区别等之后再过来完善。
写到最后,使用Beyond Compare工具进行了两份代码的对比,其实本质上差异不大。 目前发现的惟一一个区别较大的就是QtTreePropertyBrowser这个类中使用的树控件问题了,Qt4时使用的是QTreeView,而到了Qt5使用的是QTreeWidget。
超级实用的属性浏览器控件--QtTreePropertyBrowser
QtPropertyBrowser控件在Qt5.5上的安装配置
以上内容,基本就是本篇文章的全部内容啦!表格树控件可使用起来了。但愿能够帮到你们。
一块儿期待后续封装完善的控件。。。
照着文章一步一步进行,全部库应该均可以编译经过,若是实在搞不定须要工程代码的能够留邮箱
![]() |
![]() |
很重要--转载声明