Qt6之KDE框架

news/2024/11/28 23:51:59/

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.ppmy.cn/news/61774.html

相关文章

【Linux0.11代码分析】03 之 setup.s 启动流程

【Linux0.11代码分析】03 之 setup.s 启动流程 一、boot\setup.s 系列文章如下: 系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》 . 1.《【Linux0.11代码分析】01 之 代码目录分析》 2.《【Linux0.11代码分析】02…

使用Android Studio 利用极光推送SDK 制作手机 APP 实现远程测试技术 (第一部)

总参考文章:https://blog.csdn.net/qq_38436214/article/details/105073213 Android Studio 安装配置教程 - Windows(详细版) 1.JDK 安装与环境变量配置(Win10详细版) 《jdk-8u371-windows-i586.exe》 https://blog.csdn.net/qq_38436214/article/details/1050710…

2023爱分析·低代码开发平台市场厂商评估报告:数聚股份

1. 研究范围定义 随着数字化转型浪潮的推进,企业的数字化应用开发需求快速爆发。低代码作为一种“软件开发新范式”,凭借其可视化、快速构建数字化应用的能力,帮助企业提升数字化应用开发效率、降低开发门槛,深度拥抱数字化转型。…

探究Android插件化开发的新思路——Shadow插件化框架

Shadow插件化框架是什么? Shadow是一种Android App的插件化框架,它利用类似于ClassLoader的机制来实现应用程序中的模块化,并让这些模块可以在运行时灵活地进行加载和卸载。Shadow框架主张将一个大型的Android App拆分成多个小模块&#xff…

Blender 建模练习-锁链

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

3D开发工具HOOPS最新解析合集:助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力(1)3D专家提供专属技术支持服务 不管您想搭建桌面、WEB或者移动端APP应用,技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构,同时,一批可信任的工业领域3D技术专家也将为…

2018年下半年软件设计师下午试题

试题四(15分) 给定一个字符序列Bb1b2….bn,其中bi∈{A,C,G,U}。B上的二级结构是一组字符对集合S{(bi,bj)},其中i,j∈{1,2,….,n},并满足以下四个条件: (1)S中的每对字符是(A,U),(U,A),(C,G)和…

ESP32-C2开发板简介

C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…