表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)
原文链接:属性浏览器控件QtTreePropertyBrowser编译成动态库(设计师插件)
一、回顾
上一篇文章超级实用的属性浏览器控件--QtTreePropertyBrowser讲了怎么去编译QtTreePropertyBrowser库,并且可以简单实用。由于我下载的库是基于Qt4的版本,所以编译起来也费劲巴拉的,改了好久的源码才编译通过。
本篇文章我们核心讲解的是怎么把这个库编译成动态库,让别的模块去动态调用。
这里引入Qt官方维护的模块QtSolutions,里边就包含了QtTreePropertyBrowser这个项目,最关键是Qt5可以直接编译通过。
QtSolutions里边不仅仅有QtTreePropertyBrowser这个项目,而且包含了多个有用模块,文章最后会简单做以介绍。
下面我们主要还是围绕QtTreePropertyBrowser这个库来进行讲解。。
二、动态库编译
编译成动态库的方式有2种,一种是命令行,另一种是vs工具,其实本质上都是一样的,都是使用了msvc编译器。
如果想要使用其他编译器编译,本篇文章可以作为参考,可能有些地方不太实用。
编译这种长期维护的项目,我们首先就是去看代码中的文档说明,一般都会有编译步骤。
这个库也不例外,看上图中红色款圈出来的部分,就是我们编译的步骤,简单吧。
configure.bat,如果需要生成动态库则需要添加
-library
参数
1、命令行编译动态库和测试程序
命令行cd到源码根目录,执行以下步骤即可
- confiture.bat -library
- qmake
- nmake
没有什么悬念,代码应该可以正常编译通过,这里就不做过多解释。
重点看下怎么使用vs工具进行编译
2、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
然后编译,动态库的编译结果如下图,其他测试程序这里没有放出来。
3、安装文档
根据INSTALL.txt说明文件,尝试如下两种操作均失败
- 添加qch文件,发现没有这个文件
- 使用添加命令
assustant -addContentFile xxx.dcf
添加,报错。
后来无意中看到了一片文章创建文档和自定义的qt assistant,讲怎么生成Qt帮助文档的,发现其中有根据qhp文件生成qch文件的方式,尝试了下,居然可以。
操作步骤如下:
- qhelpgenerator xxx.qhp -o xxx.qch
- assistant -register xxx.qch
对于我们的qtpropertybrowser代码,可能会像下面这样。首先进入doc\html目录下,然后执行如下操作
- qhelpgenerator qtpropertybrowser.qhp -o qtpropertybrowser.qch
- assistant -register qtpropertybrowser.qch
第二步也可以通过工具来添加,如上图所示。编辑菜单 -> 首选项,选中文档页签,添加自己的qch文件即可。
4、测试文档
搜索页签下输入"QtPro",搜索到结果QtProperty,如下图所示,表示我们的文档集成成功。
三、设计师插件编译
动态库都有了,设计师插件还会远吗?
自己写一个Qt插件,把需要导入到desinger中的控件都注册进来即可。
大致流程如下
1、重写QDesignerCustomWidgetInterface
WidgetInterface类继承自QDesignerCustomWidgetInterface,WidgetInterface类包含了一些默认行为,这里就不贴出来了。
class TreeBrowserInterface : public WidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
TreeBrowserInterface(QObject * parent);
virtual QWidget * createWidget( QWidget * parent ) override;
};
2、添加到插件列表
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));
}
3、拷贝生成的dll
生成的设计师动态库拷贝到Qt安装目录下,具体目录为和bin同级plugins目录下的designer文件夹中
4、重启Qt Designer
重新启动设计师后,Widget Box列表中多了3个控件。
一切准备就绪,剩下的就是自己玩儿了
关于怎么写设计师插件,不是本文的重点,想学习的同学直接去百度即可
四、多说一句
qt-solutions是一个Qt官方维护的开源库,其中有8个项目,QtTreePropertyBrowser就是我们今天讲到的其中一个。
这个8个模块如下列表:
- qtbrowserplugin 浏览器插件
- qtlockedfile 锁定文件
- qtpropertybrowser 属性编辑器
- qtscriptclassic 脚本支持
- qtservice 提供服务属性
- qtsingleapplication 单例运行
- qtsoap SOAP协议
- qtwinmigrate 混合运行,qt写界面dll,集成到Win32工程中。
属性浏览器控件QtTreePropertyBrowser的运行效果,可以到超级实用的属性浏览器控件--QtTreePropertyBrowser这篇文章中查看。
有人说,Qt.Soluations这个库的代码时基于Qt4写的,而且最后的测试时间也是Qt4.4,最好使用Qt新版本的qtpropertybrowser代码,这里我自己也进行了测试,直接把Qt5的代码覆盖当前版本的代码,编译也是能通过的,唯一比较坑的一点就是不能作为动态库使用了。
然后我就屁颠屁颠的,把所有需要导出的类都添加了导出宏,手都给我加酸了。
随着后续对这个控件的使用,具体细节上的区别等以后再过来完善。
写到最后,使用Beyond Compare工具进行了两份代码的对比,其实本质上差别不大。 目前发现的唯一一个区别较大的就是QtTreePropertyBrowser这个类中使用的树控件问题了,Qt4时使用的是QTreeView,而到了Qt5使用的是QTreeWidget。
五、相关文章
超级实用的属性浏览器控件--QtTreePropertyBrowser
QtPropertyBrowser控件在Qt5.5上的安装配置
以上内容,基本就是本篇文章的所有内容啦!表格树控件可以使用起来了。希望可以帮到大家。
一起期待后续封装完善的控件。。。
照着文章一步一步进行,所有库应该都可以编译通过,如果实在搞不定需要工程代码的可以留邮箱
很重要--转载声明
本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。
表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)的更多相关文章
- 超级实用的表格树控件--QtTreePropertyBrowser
目录 一.源码下载 二.代码编译 1.intersect函数替换为intersected 2.移除UnicodeUTF8 3.QtGui模块拆分 4.Q_TYPENAME错误 5.qVariantVa ...
- Qt实现表格树控件-自绘树节点虚线
目录 一.开心一刻 二.自绘树节点? 三.效果展示 四.实现思路 1.可扩展接口 2.函数重写 3.同步左侧表头 五.相关文章 原文链接:Qt实现表格树控件-自绘树节点虚线 一.开心一刻 一程序员第一 ...
- Qt实现表格树控件-支持多级表头
目录 一.概述 二.效果展示 三.实现方式 四.多级表头 1.数据源 2.表格 3.QStyledItemDelegate绘制代理 五.测试代码 六.相关文章 原文链接:Qt实现表格树控件-支持多级表 ...
- Android导入第三方静态库.a编译成动态库.so
http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...
- 将pugixml库编译成动态库的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 pugixml库默认是编译成静态库的.要把pugixml库编译成一个动态库,需要对代码做一些修改,具体是将 // If ...
- [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载
1. 修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...
- Qt qml treeview 树控件
qml并没有提供树控件,只能自己写了.model仍然用ListModel对象,弄成层级的就行.delegate必须用loader动态的增加子控件,如此而已. [先看效果] [下载] http://do ...
- JS组件系列——Bootstrap 树控件使用经验分享
前言:很多时候我们在项目中需要用到树,有些树仅仅是展示层级关系,有些树是为了展示和编辑层级关系,还有些树是为了选中项然后其他地方调用选中项.不管怎么样,树控件都是很多项目里面不可或缺的组件之一.今天, ...
- 使用EasyUI的树控件构建Web界面
最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...
随机推荐
- 实用WordPress后台MySQL操作命令
关键字: WordPress MySQL 后台 数据库 地址:http://www.cnblogs.com/txw1958/archive/2013/01/06/wordpress-sql.html ...
- python3 操作注册表
1.1 读取 import winreg key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows ...
- sql语句计算出每个月的天数
原文:sql语句计算出每个月的天数 从当前月-11个月开始,到当前月为止,用一个sql语句计算出每个月的天数. SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-LEVEL+1 ...
- wpf datagrid设置右键菜单打开时选中项的背景色
原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/artic ...
- react项目实践——(3)babel
1. babel Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. (1)安装 npm install --save-dev babel-core babel-e ...
- 使用 NodeJS + Express从GET/POST Request 取值
过去无论哪一种网站应用程式的开发语言,初学者教学中第一次会提到的起手式,八九不离十就是GET/POST Request 的取值.但是,在Node.js + Express 的世界中,仿佛人人是高手,天 ...
- Bootstrap 媒体对象 列表组
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- wpf中防止界面卡死的写法
原文:wpf中防止界面卡死的写法 ); this.Dispatcher.BeginInvoke(new Action(() => { this.button1.Content = "计 ...
- Win8 Metro(C#) 数字图像处理--1 图像打开,保存
原文:Win8 Metro(C#) 数字图像处理--1 图像打开,保存 作为本专栏的第一篇,必不可少的需要介绍一下图像的打开与保存,一便大家后面DEMO的制作. Win8Metro编程中,图像相关 ...
- Win10《芒果TV》商店内测版更新至v3.1.6:率先支持Xbox One平台 - 参与反馈,赢取VIP奖励
芒果TV For Win10商店内测版 v3.1.6 于2016年9月1日星期四下午正式登陆商店 主要是优化手机版视频下载相关设置.策略.风险提示,并升级兼容目标,率先支持Xbox One平台,覆盖更 ...