QT6 Creator编译KDDockWidgets并部署到QT

为什么使用KDDockWidgets

为什么使用KDDockWidgets呢?
首先它是一个优秀的开源dock库,弥补QDockWidget的不足,详情见官网。
其次它支持QML,这是我最终选择这个dock库的主要原因,因为最近在考虑将前端界面用QML做,后台用c++。考虑到之前的项目用到了另一个开源dock库Qt-Advanced-Docking-System,需要找一个可以在QML使用的替代库,所以找上了它。就风格而言我更喜欢Qt-Advanced-Docking-System这个库。来几张截图看看
在这里插入图片描述
在这里插入图片描述
KDDockWidgets的截图,感受下,这个动图不太清晰,它这些图标只能说丑爆了,好在KDDockWidgets支持重写,后面再详细介绍。
在这里插入图片描述

编译源码

下面步入正题,源码编译,开整!

1 源码下载

先从GitHub上下载最新源码,https://github.com/KDAB/KDDockWidgets

2.0以后的版本才支持QML

直接下载zip压缩包在这里插入图片描述
,当然你喜欢clone也行,随意。
在这里插入图片描述

2 编译准备

如果未进行这步,将会报一堆错误,这块是最疼苦的,说实话,虽然把它的编译环境准备好了,但也是有点懵的,每个人的电脑环境不一样,完全按照我说的也未必在你的电脑上通过,这块随缘吧,但是还是有些必要的环境要配的。

本人不熟悉CMake,而这个库又只能CMake编译,试了用cmd cmake,cmake gui,折腾一天也没倒腾出来,最终放弃,选择自己熟悉的QT Creator来搞。

基本的软件需要先安装:
  • cmake
  • ninja
  • qt
  • vs

其中cmake和ninja不用特意安装,QT6会自动安装。
其中QtQuick 支持需要Qt >= 5.15,我本身的QT环境为QT6.5.3.配合的vs版本是vs2019.

环境变量

这步最关键,在path中将qt,vs,cmake和ninja,安装路径根据实际情况更改
在这里插入图片描述

在这里插入图片描述
配置完后,要确保环境变量生效,有不重启的方法,懒得折腾,直接重启。

3 开始编译

解压源码后,用QT Creator打开项目代码。
在这里插入图片描述
眼花缭乱的编译环境,我们选择第一个,会报错,
在这里插入图片描述
先不管,先把这些临时的构建kit都删了,其实不删也没影响,看着不舒服。在这里插入图片描述
下面来解决报错问题,cmake报错,整个项目是灰色的
在这里插入图片描述
双击第一个报错,在cmake文件中,ENABLED_FRONTENDS未被置true,查找上下文发现,引起这个问题的主要原因是未找到QT环境。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们的环境是QT6,默认启用QT5,需要把这个变量设置一下,QT Creator在构建设置中提供了CMake关键变量查询和设置的功能,和CMake gui类似,添加KDDockWidgets_QT6,然后勾选上,点击下部的执行CMake

注意变量名称不是DKDDockWidgets_QT6

在这里插入图片描述
执行完CMake后,会出现
在这里插入图片描述
工程树也正常了
在这里插入图片描述
直接编译,没问题,example里的例程也都可以打开,学习代码,参看事例都没问题,作为动态库被使用也可以了。但是有些不方便,一是需要的dll,lib在build里比较散乱,而且也没有完整的include文件,需要直接把源码放到作为动态库的include里或者手动把需要的头文件挑出来。
简单新建个QML工程试试就知道了,把编译完的lib和dll放到测试工程的lib下,把源码拷贝到inc里,
在这里插入图片描述

在这里插入图片描述
配置pro文件
在这里插入图片描述

随便将源码例程的一段代码移植过来,比如customtabbar的代码,
在这里插入图片描述

编译,运行
在这里插入图片描述

需要注意的是在pro文件里需要加上DEFINES += KDDW_FRONTEND_QT。
不然头文件引用报错,kddockwidgets_export.h这个文件是编译生成的文件,直接在源码是找不到的,具体可看看CMakeList文件。
在这里插入图片描述

部属到QT环境

下面解锁正确玩法,即将这个库配置到QT。需要提前准备。
切回构建,将构建步骤里的install勾选上,debug和release需要分别勾选。然后构建工程。
在这里插入图片描述
经过几分钟的构建,(第一遍的时候就怕出现和cmake gui一样的一堆问题),煎熬一会后,成功编译。默认安装路径为C:\Program Files (x86)\KDDockWidgets
在这里插入图片描述

如果不是以管理员打开QT Creator,可能出现无法创建路径的错误,
在这里插入图片描述
至此,编译完成。在目标路径生成如下文件
在这里插入图片描述

熟悉QT的人看到上图应该不陌生,典型的QT环境结构,share是doc,这里没什么用,直接拷贝到QT下,不用担心内部路径结构,都是按QT的结构生成的。
在这里插入图片描述
还有些小瑕疵,继续上边的测试程序,更改pro文件,编译报错
在这里插入图片描述
查看D:\program\QT\6.5.3\msvc2019_64\mkspecs\modules下的qt_KDDockWidgets.pri
在这里插入图片描述
发现库名称为kddockwidgets-qt6
在这里插入图片描述
而我们编译生成的库名称是kddockwidgets-qt62.lib
在这里插入图片描述
将pri文件qt_KDDockWidgets.pri修改一下。重启QT,再次编译,库引用问题已经没了,但出现了头文件引用错误
在这里插入图片描述
这个也很容易找到问题,对比qt_KDDockWidgets.pri文件的includes和实际路径,多了一个kddockwidgets-qt6。
在这里插入图片描述
在这里插入图片描述
两个解决方法:
1 引用头文件时,多加一个kddockwidgets-qt6前缀;
2 修改qt_KDDockWidgets.pri的includes,在其后追加kddockwidgets-qt6,重启QT
在这里插入图片描述
编译,也没问题,运行
在这里插入图片描述

结语

看似过程很简单,如果自己从头来一遍,可能会遇到各种问题,最麻烦的莫过于配置环境变量,这是基础,这里不过后面的都免谈。

虽然过程坎坷,但最终还是搞定了。

下一步就是前面提到的重写它的样式了,图标太丑了。后面有时间会把重写样式再分享一下,不过那个就相对简单了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/199977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之自监督学习(五)MAE翻译与总结(一)

Masked Autoencoders Are Scalable Vision Learners Abstract 本文表明,掩蔽自动编码器(MAE)是一种可扩展的计算机视觉自监督学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机patch,并重建缺失的像素。它基于两个…

可自行DIY单TYPE-C接口设备实现DRP+OTG功能芯片

随着USB-C接口的普及,欧盟的法律法规强制越来越多的设备开始采用这种接口。由于 USB-C接口的高效性和便携性,使各种设备之间的连接和数据传输变得非常方便快捷,它们不仅提供了强大的功能,还为我们的日常生活和工作带来了极大的便利…

MySQL- CRUD

一、INSERT 添加 公式 INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]); 示例: CREATE TABLE goods (id INT ,good_name VARCHAR(10),price DOUBLE ); #添加数据 INSERT INTO goods (id,good_name,price ) VALUES (20,华为手机,…

商城免费搭建之java商城 鸿鹄云商 B2B2C产品概述

【B2B2C平台】,以传统电商行业为基石,鸿鹄云商支持“商家入驻平台自营”多运营模式,积极打造“全新市场,全新 模式”企业级B2B2C电商平台,致力干助力各行/互联网创业腾飞并获取更多的收益。从消费者出发,助…

Moonbeam生态项目分析 — — 去中心化交易所Beamswap

流动性激励计划Moonbeam Ignite是帮助用户轻松愉快体验Moonbeam生态的趣味活动。在Moonbeam跨链连接的推动下,DeFi的各种可能性在这里爆发。DeFi或许不热门,但总有机会捡漏,了解Monbeam生态项目,我们邀请Moonbeam大使分享他们的研…

重庆数字孪生技术推进制造业升级,工业物联网可视化应用加速

重庆数字孪生、5G、人工智能、物联网、大数据等新一代信息技术的出现及终端计算设备的发展,带来了研发模式、生产模式、消费模式、体制机制的系统性变革,企业应该建设适应工业4.0时代发展要求的新型生产体系。巨蟹数科数字孪生智能工厂通过部署多样化用例…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

SEO工具-免费功能最全的5款SEO工具

随着互联网的蓬勃发展,搜索引擎优化(SEO)已经成为许多企业和个人网站必备的关键技能。然而,对于初学者或者运营小型网站的人来说,使用专业的SEO工具可能涉及较高的成本。在这篇文章中,我们将向您推荐五款高…

Angular的Ng-Zorro组件库通知提醒框知识点

目录 系列文章目录 一、在angular中引入通知提醒框服务 二、创建通知提醒框 提示:在实际操作中根据id移除通知提醒框的方法尚未熟悉,根据此文档进行巩固 一、在angular中引入通知提醒框服务 constructor(private notifition: NzNotificationService) {}…

《算法通关村——幂运算问题解析》

《算法通关村——幂运算问题解析》 2 的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1&#xff1…

postman接口测试教程与实例分享

postman 的界面图 各个功能区的使用如下: 快捷区: 快捷区提供常用的操作入口,包括运行收藏夹的一组测试数据,导入别人共享的收藏夹测试数据(Import from file, Import from folder, Import from link等)&…

考虑区域多能源系统集群协同优化的联合需求侧响应模型程序代码!

本程序参考中国电机工程学报论文《考虑区域多能源系统集群协同优化的联合需求侧响应模型》,文章使用关系矩阵来表示电、热、气的耦合关系,使用NSGA2方法对多目标优化方法进行求解,文章中考虑环境因素是目前研究的热点。程序中算例丰富&#x…

SAP FB01 更新采购凭证历史EKBE

参考链接BAPI_ACC_DOCUMENT_POST – Vendor Down payment: Update Purchase order info and PO history 不需要链接里的替代过程,可以直接写在函数BAPI_ACC_DOCUMENT_POST的增强结构EXTENSION2里 需要复制BTE增强1050 在其中调用函数ME_CREATE_HISTORY_FINANCE 即…

将图像的rgb数据转成DICOM医学图像格式

dcmtk官方文档:https://support.dcmtk.org/docs/ dcmtk最新源码下载:https://www.dcmtk.org/en/dcmtk/dcmtk-software-development/ dcmtk旧版本源码下载:https://dicom.offis.de/download/dcmtk/ 用DCMTK库实现将图像转成dcm格式 dcmtk库的…

甘草书店记: 2023年10月11日 星期三 晴 「做有光的人,照亮他人,也引人同行」

发了两篇《甘草书店记》,书店计划公之于众,收获了不少人的赞扬和鼓励,来自生活中的友人,来自麦田的客户和朋友,来自图书界的同行前辈,也来自商界的同仁。其中,最特别留言来自甘草书店投资方的张…

解析javascript数组方法 find 和 filter 有何区别

首先用一个案例可以很直观的看到 find 和 filter 的区别; 相同点: 两者分别可以接受三个参数:当前元素、当前索引、整个数组;两者都可以用来查找数组中符合条件的元素; 不同点: find: 用于查…

连接备份1128

深度学习—分类识别篇:http://tr.daheng-imaging.com/watch/1050636http://tr.daheng-imaging.com/watch/1050636 深度学习—目标检测篇:http://tr.daheng-imaging.com/watch/1101141http://tr.daheng-imaging.com/watch/1101141 深度学习—缺陷分割篇&a…

【算法】滑动窗口题单——1.定长滑动窗口⭐

文章目录 1456. 定长子串中元音的最大数目2269. 找到一个数字的 K 美丽值1984. 学生分数的最小差值(排序)643. 子数组最大平均数 I1343. 大小为 K 且平均值大于等于阈值的子数组数目2090. 半径为 k 的子数组平均值2379. 得到 K 个黑块的最少涂色次数1052…

Gson的用法详解

一、简介 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。 Gson官网:gson Gson源码地址:google/gson 二、依赖…

【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied

问题描述 在Linux系统上运行npm run serve命令时,控制台报错: sudo npm run serve project50.1.0 serve vue-cli-service serve sh: 1: vue-cli-service: Permission denied错误截图如下: 原因分析 该错误是由于vue-cli-service文件权限不…
最新文章