Qt6之KDE框架

news2024/11/23 4:50:33

25年来,KDE社区一直在使用Qt开发各种自由软件产品。其中包括Plasma桌面环境,像Krita和Kdenlive这样的创意工具,像GCompris这样的教育应用程序,像Kontact这样的群件套件以及无数其他应用程序,实用程序和小部件。

Qt以其丰富的高质量跨平台API而闻名。但是,它并不涵盖每个用例。事实上,这是不可能的。因此,为了填补空白,随着时间的推移,KDE 创建了已合并到许多 KDE 项目中的代码。为了促进在 KDE 项目之外重用这些经过实战考验的解决方案,KDE以模块化库的形式共享这些代码。

我们称这些库为KDE框架。

目前,有 83 个 KDE 框架提供了广泛的功能。例如,KNotifications允许您在Windows,macOS,Linux和Android上创建弹出通知,而无需编写特定于平台的代码。其他框架为专门的库或接口提供包装器,使它们更容易被Qt程序员使用。例如,bluez-qt框架为bluez D-Bus API提供了一个Qt风格的接口。一些框架是有用的类的集合,如KWidgetsAddons,其中包含许多不属于QtWidgets的有用小部件。

作为Qt开发人员,您可能在不知情的情况下使用了使用KDE框架构建的软件。为 Kate 和 KDevelop 等 KDE 应用程序提供支持的语法高亮框架也用于 Qt Creator。

 

利用 KDE 框架有很多好处。在本系列中,我们将研究其中的一些,提供实用和真实世界的示例,帮助您学习如何将 KDE 框架整合到您自己的产品中。

在本系列的第一篇博客中,我想向您介绍KConfig。

KConfig是最常用的框架之一。它允许开发人员在文件系统中存储和获取配置数据。它的基本功能类似于Qt自己的QSettings,但它提供了一些附加功能。

在应用程序中使用 KConfig 之前,我们需要将其添加到我们的构建系统中。对于 CMake,这是按如下方式完成的:

如果您的应用程序使用 QMake,您只需要: 

 以下代码显示了 KConfig 的基本用法:

首先,创建一个 KConfig 对象。默认情况下,配置保存在QStandardPaths::GenericConfigLocation中具有指定名称的文件中,但是可以调整确切的位置。

配置条目按组进行组织。每个 KConfig 对象可以包含多个组,每个组包含多个包含配置数据的键值对。

要读取配置条目,请首先从 KConfig 对象创建 KConfigGroup,然后使用 readEntry 查询特定键。readEntry 采用可选的默认值,当不存储该键的数据时,将使用该值。

要编写设置,请使用 writeEntry。数据不会立即写入磁盘。当 KConfigGroup 对象被析构时,将执行所有挂起的写入操作。可以使用 sync() 方法强制写入磁盘。

到目前为止,所有这些都可以通过QSettings进行。那么,使用KConfig有什么好处呢?

QSettings和KConfig都允许配置级联。在这里,配置值是从两个位置读取的:系统范围的配置值和每用户的位置。这允许定义系统范围的默认值,并使用户能够覆盖它们的值。但是,在企业设置中,这可能是不可取的。KConfig允许系统管理员将设置标记为不可变,以防止用户覆盖提供的默认值。这不需要在应用程序中更改任何代码。应用程序可以查询某个键是否标记为不可变,以禁用相关的 UI 部分。

有时两个进程访问同一个配置文件。在这里,当另一个进程更改配置时通知一个进程,以便它可以做出相应的反应,这一点很重要。KConfigWatcher允许通知另一个进程有关配置更改的信息。它通过D-Bus做到这一点。因此,它仅适用于D-Bus可用的系统(即Linux)。

KConfig(和QSettings)的这种简单用法有许多缺点。库/编译器没有关于配置数据结构的信息。大多数访问都是使用字符串标识符完成的。这些容易出现键入错误,编译器无法在生成时验证这些错误。也没有关于配置条目的数据类型的信息,例如,条目是单个字符串、字符串列表还是整数。另一个问题是KConfig不能直接在QML上下文中使用。

KConfig提供了解决这两个问题的KConfigXT机制。它基于配置数据结构的 XML 描述。在编译时,此信息用于生成用于访问配置的C++类。该类还可以将条目公开为属性,以便 QML 可以直接使用它。

上面以 XML 描述表示的示例如下所示:

这存储在myappsettings.kcfg文件中。

KConfigXT 的行为由一个单独的配置文件 myappsettings.kcfgc 控制:

然后上面的代码示例变为:

 

 

 

 

 

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

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

相关文章

Shell+VCS学习3---VCS命令

1 VCS介绍 VCS的功能可以大致分为两个大类:编译和仿真。 VCS编译的过程,就是经过一系列的操作,将verilog代码转换为可执行文件(.svim),接下来就是用dve进行仿真过程生成.vpd波形文件。 VCS是编译型verilo…

C++---树形DP---树的最长路径(每日一道算法2023.5.4)

注意事项: 本题为"树与图的DFS深度优先遍历—树的重心"的近似题,同时涉及到 单链表模拟邻接表存储图 的操作,建议先理解那篇文章。 题目: 给定一棵树,树中包含 n 个结点(编号1~n)和 …

JavaScript:栈和对列

文章目录 栈和对列Js 有栈与队列吗20. 有效的括号 - 力扣(LeetCode)思路 1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)思路代码分析array.join() 操作打印const s of str 操作遍历 150. 逆波兰表达式求值 - 力扣&#xf…

(1)QT基础铺垫

目录 1.Qt特性 2. 新建项目 3. 工作目录与构建目录 4. 工作目录 4.1 .pro 项目配置文件 4.2 dialog.h 4.3 dialog.cpp 4.4 main.cpp 5. 帮助文档 6. 调试信息 1.Qt特性 Qt经常被当作是一个基于c语言的gui开发框架,但是这并不是qt的全部,除了开…

助力工业物联网,工业大数据之ODS层构建:申明分区代码及测试【十】

文章目录 知识点13:ODS层构建:申明分区代码及测试知识点14:ODS层与DWD层区别知识点15:DWD层构建:需求分析知识点16:DWD层构建:建库实现测试知识点17:DWD层构建:建表实现测…

Packet Tracer – 研究 VLAN 实施

Packet Tracer – 研究 VLAN 实施 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 S1 VLAN 99 172.17.99.31 255.255.255.0 不适用 S2 VLAN 99 172.17.99.32 255.255.255.0 不适用 S3 VLAN 99 172.17.99.33 255.255.255.0 不适用 PC1 NIC 172.17.10.2…

Linux部署Gitlab/上传项目

一、提前准备 1.1安装依赖工具 yum install -y curl policycoreutils-python openssh-serversystemctl start sshd systemctl enable sshd 1.2安装Postfix邮件服务器 #安装 postfix yum install -y postfix#启动 postfix 并设置为开机启动 systemctl enable postfix systemctl …

HashCode与String大家庭

当金钱站起来说话时,所有的真理都保持了沉默;金钱一旦作响,坏话随之戛然而止。 Hashcode的作用 java的集合有两类,一类是List,还有一类是Set 前者有序可重复,后者无序不重复。当我们在set中插入的时候怎…

Vue传参${id}变成$%7Bid%7D

发生缘由 外卖项目在Linux服务器上面运行发送请求乱码 运行环境 电脑系统:win10jdk版本:jdk-8SpringBoot版本:v2.4.5MP版本:3.4.2Vue版本:Vue.js v2.6.12Linux版本:Centos7 报错信息 // 修改页面反查详…

MES系统中的BOM为何如此重要?先进的BOM体系怎么构建?

其实不管有没有数字化,BOM都是制造企业的灵魂纽带,对于产品繁多、流程冗长的工业企业来说,如果BOM管理不规范,必然对生产效率和产品质量带来巨大的隐患,因此在工业企业的数字化转型之路中,建立科学规范的BO…

Blender 建模练习-锁链

目录 1.1.1 贝塞尔圆1.2 阵列修改器1.3 阵列修改器 物体偏移1.4 添加贝塞尔曲线1.5 曲线修改器 1. 本次练习主要使用到阵列修改器、贝塞尔曲线、空物体 1.1 贝塞尔圆 把贝塞尔圆进行缩放,然后在物体数据属性|几何数据|倒角|设置倒角深度为0.05 1.2 阵列修改器 …

【数据结构】二叉树(详细)

二叉树 1.树1.1定义1.2基本术语1.3树形结构和线性结构1.4树的存储结构1.4.1双亲表示法1.4.2孩子兄弟表示法 2.二叉树2.1定义2.2特殊二叉树2.3性质2.4存储结构2.4.1顺序存储2.4.2链式存储结构 3.二叉树的基本操作3.1前序遍历(先序遍历)3.2中序遍历3.3后序…

开放原子训练营(第三季)inBuilder低代码开发实验室---报销单录入系统

作为一名低代码初学者,我使用inBuilder系统设计了一款报销单录入系统,实现了报销单录入与显示报销单列表的功能(如图1与图2所示),并获得了很多开发心得。从inBuilder系统的优点、缺点以及开发过程三方面出发&#xff0…

go继承nacos配置中心并读取配置信息

配置中心 为什么需要配置中心 平时我们写一个demo的时候,或者说一个单体的应用,都会有一个配置文件,不管是 json文件或者yaml文件,里面包含了redis,mysql,es等信息,如果我们修改了配置文件,往往我们需要重…

和Ai一起学习CMake(一)

和Ai一起学习CMake 现在人工智能爆火,ChatGPT、new bing等层出不穷。我们借助Ai来学习一下CMake。下面是我与Ai的问答,这个学习主要是通过Ai来学习,但是防止Ai乱说话,我会结合自身的知识和实际操作给出相应的补充。 我的环境如下…

玄子Share - Tomcat 9 安装配置教程(含安装包)

玄子Share - Tomcat 9 安装配置教程(含安装包) 下载 下载链接 官网 https://tomcat.apache.org/ 下载教程 进入 Tomcat 官网,点击左侧导航栏,选择需要的版本下载。这里按照课程要求选择tomcat 9的版本 Mirrors:选…

为什么越来越多的企业开始选择云计算?

一、前言 随着数字化时代的到来,企业对于数据的需求越来越大,而传统的数据存储方式已经无法满足企业的需求。云计算作为一种新兴的技术,可以为企业提供更加灵活、高效、安全的数据存储和处理方式,因此越来越多的企业开始选择云计算…

element ui el-calendar日历组件使用总结

el-calendar日历组件使用总结 1. 需求说明2. 基础实现3. 只展示当月数据4. 动态切换日历里的数据实现5. 顺便把快捷方式隐藏了,不让用户选择上一个月下一个月 1. 需求说明 按月显示,每次只显示一个月的日期,其余隐藏 日历组件的显示时间随着…

数值分析-牛顿插值公式

目录 一、引言 二、牛顿插值公式的基本概念 1.插值问题 2.插值多项式 3.牛顿插值公式 三、牛顿插值公式的推导过程 四、牛顿插值公式的应用 1.图像处理 2.信号处理 五、牛顿插值公式的优缺点 1. 优点 2. 缺点 六、总结 一、引言 在数值分析中,插值是一…

干掉复杂的Java工具类,Hutool 工具库确实香~

Hutool 大家已经比较熟悉了,这是一个超全的 Java 工具库,深受国内开发者的喜爱。 我之前其实是不太喜欢使用这种功能太多的工具类的,也比较担心稳定性和安全性,后面慢慢接受了就感觉其实也还好。而且,我们还可以按需只…