QT6 Creator编译KDDockWidgets并部署到QT

news2024/9/22 5:26:44

为什么使用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.coloradmin.cn/o/1264554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux ] sed文本处理和免交互

一、sed 1.1 sed是什么 sed 是一种流编辑器(stream editor),用于对文本数据进行文本转换和处理。它通常被用于在命令行中执行文本编辑任务,可以对输入的文本进行搜索、替换、删除等操作,并将结果输出。sed 是一个非交…

项目中的svg图标的封装与使用

1.安装 npm install vite-plugin-svg-icons -D2.在vite.config.ts中配置 **所有的svg图标都必须放在assets/icons // 引入svg import { createSvgIconsPlugin } from vite-plugin-svg-iconsexport default defineConfig({plugins: [vue(),createSvgIconsPlugin({iconDirs: [p…

Java第十二篇:连接安全版kafka(Kerberos认证)出现的问题解答

Could not find a ‘KafkaClient’ entry in the JAAS configuration 问题现象 问题原因 原因没有找到,怎么引起的倒是很清楚。原因就是找到不到指定路径下的kafka_client_jaas.conf文件,别看我的路径带了两个//,但没问题的,等同…

实战中使用的策略模式,使用@ConditionalOnProperty实现根据环境注册不同的bean

场景复现 举个例子,针对不同的设备的内存的不同加载一些资源的时候需要采取不同的策略,比如,在内存比较大的设备,可以一次性加载,繁殖需要使用懒加载,这个时候我们就可以采用配置文件配置中心去控制了 Cond…

.NET生成微信小程序推广二维码

前言 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且与运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了…

智能学习台灯_AI摄像头学习机基于MTk8175方案

智能学习台灯是一款专为中小学生设计的学习辅助工具,具有多项突出的参数和功能。首先,它采用了基于联发科MTK平台的解决方案,内置了12纳米四核Cortex-A53处理器,提供了稳定而高效的性能。操作系统方面,智能学习台灯运行…

Java17(LTS Long Term Support)特性

支持JDK17的主流技术框架 spring framework 6.xspringboot 3.xkafka 3.0(不在支持jdk8)jenkins 2.357(必须jdk11起步)James Gosling表示赶紧弃用Java8,使用性能最好的JDK17Chart GPT也推荐JDK17,从长期到性能来说。 JDK17的特性 …

如何使用ArcGIS实现生态廊道模拟

生态廊道是指一种连接不同生态系统的走廊或通道,其建立有助于解决人类活动对野生动植物栖息地破碎化和隔离化的问题,提高生物多样性,减轻生态系统的压力。在城市化和农业开发不断扩张的背景下,生态廊道对于野生动植物的生存和繁衍…

了解 Navicat 的连接配置文件

Navicat 16 拥有了许多改进和新功能,以满足数据库开发人员和管理员的需求。凭借 100 多种增强功能和一个全新的界面,有比以往更多的方法去构建、管理和维护数据库。众多改进中,旨在最大限度地提高生产率的一个改进是配置多个连接配置文件的能…

unity3d 旋转cube时变形

将cube移到父路径同级,重置再,更改角度,或者将父路径先重置,再将cube移动到父节点下面

2020年6月9日 Go生态洞察:VS Code Go扩展加入Go项目

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

反射、枚举以及lambda表达式

1. 反射 1.1 定义 java的.class文件在运行时会被编译为一个Class对象,既然是对象,那么我们就可以通过一定的方式取到这个对象,然后对于这个对象进行一系列操作(改变原本类的属性、方法)。 这个操作就是反射&#xf…

基于模块暴露和Hilt的Android模块化方案

ModuleExpose 项目地址:https://github.com/JailedBird/ModuleExpose 序言 Android模块化必须要解决的问题是 如何实现模块间通信 ?而模块之间通信往往需要获取相同的实体类和接口,造成部分涉及模块通信的接口和实体类被迫下沉到基础模块&…

使用 Mybatis 的 TypeHandler 存取 Postgresql jsonb 类型

文章目录 使用 TypeHandler 存取 Postgresql jsonb 类型常见错误column "" is of type jsonb but expression is of type character varying 使用 TypeHandler 存取 Postgresql jsonb 类型 首先在数据库表中定义 jsonb 类型: create table tb_user_info…

Unity中Shader的BRDF解析(四)

文章目录 前言一、BRDF 中的 IBL二、解析一下其中的参数1、光照衰减系数 :surfaceReduction2、GI镜面反射在不同角度下的强弱 :gi.specular * FresnelLerp (specColor, grazingTerm, nv);在BRDF中,IBL(Image Based Light&#xff…

Shell编程基础 – for循环

Shell编程基础 – for循环 Shell Scripting Essentials - for Loop 大多数编程语言都有循环的概念和语句。如果想重复一个任务数十次,无论是输入数十次,还是输出数十次,对用户来说都不现实。 因此,我们考虑如何用好Bash Shell编…

一个人撸码!之vue3+vite+element-plus后台管理(标签页组件)

一个后台管理常常需要一个标签页来管理已经打开的页面,这里我们单独写一个组件来展示标签页数组。 该标签页组件只做展示不涉及操作数据。标签页数组可记录已打开的数组,还能定义什么页面需要缓存,是一个重要的功能呢。 首先,建立…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了…

FlowJo 10 v10.4(流式细胞分析软件)

FlowJo是一款广泛应用的流式细胞数据分析软件,它功能强大,简单易用,是流式领域最受推荐的一款专业分析软件,也是各高影响力科学期刊使用最多的软件,已经成了行业的一个标准。 FlowJo具有全面专业的分析功能&#xff0…

解析直播第三方美颜SDK:技术原理与应用

时下,直播平台和主播们纷纷引入美颜技术,以提升视觉效果和用户体验。而在众多美颜技术中,直播第三方美颜SDK成为许多开发者和平台的首选,因其灵活性和高效性而备受推崇。 一、技术原理:美颜算法的精髓 第三方美颜SDK…