表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)

目录

  • 一、回顾
  • 二、动态库编译
    • 1、命令行编译动态库和测试程序
    • 2、vs工具编译动态库和测试程序
    • 3、安装文档
    • 4、测试文档
  • 三、设计师插件编译
    • 1、重写QDesignerCustomWidgetInterface
    • 2、添加到插件列表
    • 3、拷贝生成的dll
    • 4、重启Qt Designer
  • 四、多说一句
  • 五、相关文章

一、回顾

上一篇文章超级实用的表格树控件--QtTreePropertyBrowser讲了怎么去编译QtTreePropertyBrowser库,并且可以简单实用。由于我下载的库是基于Qt4的版本,所以编译起来也费劲巴拉的,改了好久的源码才编译通过。

本篇文章我们核心讲解的是怎么把这个库编译成动态库,让别的模块去动态调用。

这里引入Qt官方维护的模块QtSolutions,里边就包含了QtTreePropertyBrowser这个项目,最关键是Qt5可以直接编译通过。

QtSolutions里边不仅仅有QtTreePropertyBrowser这个项目,而且包含了多个有用模块,文章最后会简单做以介绍。

下面我们主要还是围绕QtTreePropertyBrowser这个库来进行讲解。。

二、动态库编译

编译成动态库的方式有2种,一种是命令行,另一种是vs工具,其实本质上都是一样的,都是使用了msvc编译器。

如果想要使用其他编译器编译,本篇文章可以作为参考,可能有些地方不太实用。

编译这种长期维护的项目,我们首先就是去看代码中的文档说明,一般都会有编译步骤。

这个库也不例外,看上图中红色款圈出来的部分,就是我们编译的步骤,简单吧。

configure.bat,如果需要生成动态库则需要添加-library参数

1、命令行编译动态库和测试程序

命令行cd到源码根目录,执行以下步骤即可

  1. confiture.bat -library
  2. qmake
  3. 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说明文件,尝试如下两种操作均失败

  1. 添加qch文件,发现没有这个文件
  2. 使用添加命令assustant -addContentFile xxx.dcf添加,报错。

后来无意中看到了一片文章创建文档和自定义的qt assistant,讲怎么生成Qt帮助文档的,发现其中有根据qhp文件生成qch文件的方式,尝试了下,居然可以

操作步骤如下:

  1. qhelpgenerator xxx.qhp -o xxx.qch
  2. assistant -register xxx.qch

对于我们的qtpropertybrowser代码,可能会像下面这样。首先进入doc\html目录下,然后执行如下操作

  1. qhelpgenerator qtpropertybrowser.qhp -o qtpropertybrowser.qch
  2. 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个模块如下列表:

  1. qtbrowserplugin 浏览器插件
  2. qtlockedfile 锁定文件
  3. qtpropertybrowser 属性编辑器
  4. qtscriptclassic 脚本支持
  5. qtservice 提供服务属性
  6. qtsingleapplication 单例运行
  7. qtsoap SOAP协议
  8. qtwinmigrate 混合运行,qt写界面dll,集成到Win32工程中。

表格树控件QtTreePropertyBrowser的运行效果,可以到超级实用的表格树控件--QtTreePropertyBrowser这篇文章中查看。

有人说,Qt.Soluations这个库的代码时基于Qt4写的,而且最后的测试时间也是Qt4.4,最好使用Qt新版本的qtpropertybrowser代码,这里我自己也进行了测试,直接把Qt5的代码覆盖当前版本的代码,编译也是能通过的,唯一比较坑的一点就是不能作为动态库使用了。

然后我就屁颠屁颠的,把所有需要导出的类都添加了导出宏,手都给我加酸了。

随着后续对这个控件的使用,具体细节上的区别等以后再过来完善。

写到最后,使用Beyond Compare工具进行了两份代码的对比,其实本质上差别不大。 目前发现的唯一一个区别较大的就是QtTreePropertyBrowser这个类中使用的树控件问题了,Qt4时使用的是QTreeView,而到了Qt5使用的是QTreeWidget。

五、相关文章

超级实用的表格树控件--QtTreePropertyBrowser

创建文档和自定义的qt assistant

QtPropertyBrowser控件在Qt5.5上的安装配置

以上内容,基本就是本篇文章的所有内容啦!表格树控件可以使用起来了。希望可以帮到大家。

一起期待后续封装完善的控件。。。

照着文章一步一步进行,所有库应该都可以编译通过,如果实在搞不定需要工程代码的可以留邮箱



很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。


表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)

原文地址:https://www.cnblogs.com/swarmbees/p/11129274.html

时间: 07-02

表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)的相关文章

Android导入第三方静态库.a编译成动态库.so

http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的静态库导入进来一起编译了.我在编译的时候遇到了不少问题,我觉得有必要进行总结一下. 下面我以一个简单的实际例子来讲解如何在动态库中导入静态库. 静态库中的源代码有两个文件:static.h, static.

DPDK编译成动态库,应用程序检测不到端口的问题

把DPDK由静态库方式改为编译成动态库后,原本正常的应用程序就不能运行了. 在初始化的时候,rte_eth_dev_count()总是返回0,而用dpdk_nic_bind.py --status查看端口是绑定成功的. DPDK默认是编译成静态库的,改成动态库只需要把common_linuxapp文件中CONFIG_RTE_BUILD_SHARED_LIB=n修改成CONFIG_RTE_BUILD_SHARED_LIB=y就行了. DPDK编译成动态库后,PMD的各个驱动就单独编译成了一个个的.

Qt qml treeview 树控件

qml并没有提供树控件,只能自己写了.model仍然用ListModel对象,弄成层级的就行.delegate必须用loader动态的增加子控件,如此而已. [先看效果] [下载] http://download.csdn.net/detail/surfsky/8406181 [核心代码] 1 import QtQuick 2.1 2 import QtQuick.Controls 1.0 3 4 5 /** 6 树控件 7 作者:surfsky.cnblogs.com 2014-10 8 协议

iOS:UITableView表格视图控件

UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要有:创建表格.设置单元格(行数.内容.行高).编辑单元格(删除单元格.插入单元格).移动单元格.标记单元格.修改单元格等. 一.表格式图的属性和行为: 1.基本属性: @interface UITableView : UIScrollView <NSCoding> @property (nonatomi

树控件CTreeCtrl 创建与双击响应

函数功能:创建一个树控件,并实现双击节点响应事件. 响应方法:在树控件上增加双击响应事件. 代码: 1.在OnInitDialog中:   CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1);  //调用ModifyStyle方法修改数控件Sytle  ctreectrl->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);  //设置树控件字体颜色  ct

转:zTree树控件实战篇:针对多个下拉加载zTree树应该如何做出合理的配置

今天有一个zTree的朋友遇到一个非常棘手的问题,才研究zTree树控件两天就被上头催着看成果,很是苦恼.他面对的问题就是页面内多个地方需要下拉在其文本框下方加载zTree树,由于对zTree下拉加载树的一些关键配置以及原理的不太深入导致问题无从查起.今天就来一起聊聊这样一个下拉加载zTree的问题. 一.几个关键的配置需要注意 1.针对不同的下拉选择需要有自己独立控制zTree显示位置以及隐藏相应标签的方法: 2.需要根据所点击事件定位zTree的显示位置: 3.zTree树选择后需要加以判断

100行代码解析Dojo树控件拖拽案例

案例设定: 创建2个树控件,左右排列. 使用拖动的方式,将树节点从左侧树控件拖拽的右侧树控件. 拖拽过程中右侧树控件要进行验证,确认是否可以方式拖拽中的节点. 放置的处理,识别要放置的节点,获取其信息并动态创建新的节点(基于基础类型进行实例化的过程). 右侧树控件内(实例化之后的节点),同类型节点间支持拖动排序. Dojo版本 1.10.3 图例1:创建2个树控件,左右排列. 图例2.3: 使用拖动的方式,将树节点从左侧树控件拖拽的右侧树控件. 拖拽过程中右侧树控件要进行验证,确认是否可以方式拖

PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)

1.树控件的基本使用方法QTreeWidget'''QTreeWidget树控件的使用方法添加图标,添加表格,添加复选框等'''from PyQt5.QtWidgets import *from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIcon,QBrush,QColorimport sys class treewidget(QMainWindow): def __init__(self): super(treewidget,self).__

基于MVC+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重构完善过程中,很多细节花费不少时间进行研究和提炼,一步步走过来,也积累了不少经验,本系列将主要介绍我在进一步完善我的Web框架基础上积累的经验进行分享,本随笔主要介绍使用EasyUI的树控件构建Web界面的相关经验. 在很多界面设计上,我们可能都需要引入树列表控件,这个控件可以用zTree来实现,也