docs/社区开发指南/openKylin+SDK开发指南V2.0.md

215 KiB
Raw Blame History

输入图片说明

openSDK V2.0 ------开发指南

输入图片说明

输入图片说明

openSDK SIG

目录

1 概述
2 部署方式
3 系统能力 SDK
  3.1 系统信息
    3.1.1 系统时间报时
    3.1.2 获取硬件信息
    3.1.3 获取包列表信息
    3.1.4 获取资源信息
    3.1.5 获取操作系统基础信息
    3.1.6 获取网络信息
    3.1.7 获取系统运行时信息
    3.1.8 获取当前地理信息
  3.2 电源管理
    3.2.1 锁屏设置
  3.3 文件管理
  3.4 AI 能力
    3.4.1 OCR 文字识别功能
  3.5 打印机管理
4 应用支撑 SDK
  4.1 QT 自研控件模块
    4.1.1 窗体模块
    4.1.2 对话框模块
    4.1.3 输入框模块
    4.1.4 按钮模块
    4.1.5 Bar 模块
    4.1.6 滑动条模块
    4.1.7 消息提示模块
    4.1.8 面包屑 KBreadCrumb
    4.1.9 KCommentPanel
    4.1.10 KListView
    4.1.11 KTag
    4.1.12 KTranslucentFloor
  4.2 Wayland-helper
    4.2.1 WindowManager
    4.2.2 WindowInfo
    4.2.3 UkuiStyleHelper
  4.3 应用通用功能模块
    4.3.1 日志模块
    4.3.2 系统相关模块
    4.3.3 d-bus 模块------即将废弃
    4.3.4 系统信息模块
5 基础开发 SDK
  5.1 日志
  5.2 定时器
  5.3 C 语言字符串扩展
  5.4 链表模块
  5.5 配置文件操作
  5.6 单位进制转换

1 概述

openKylin 自研开发者套件(以下简称 openSDK是在 openKylin 社区操作系统上为生态建设与软件开发提供安全、可靠、快捷、稳定的开发者接口。相比于社区中其他的开发者套件或框架openSDK 更加聚焦于解决开放麒麟桌面操作系统的兼容、适配、移植、优化等方面的问题。openSDK 当前聚焦三大模块,包括应用支撑 SDK、系统能力 SDK、基础开发 SDK同时充分考虑 openSDK 的兼容性。

本文档旨在为开发者在 openKylin 系统上进行应用开发时,提供一种高效查阅 openSDK 接口的声明和使用方法的方式。减少开发者在使用 openSDK 时的学习成本。

SDK 的整体模块介绍如下:

模块 描述
应用支撑 SDK 聚焦于应用显示层,为开发者提供麒麟自研控件,向图形化应用提供图形化开发功能,可使用统一的 UI 框架,进行应用窗口的管理以及与系统进行互动等,降低应用开发与应用迁移学习成本;
系统能力 SDK 聚焦于为开发者提供更多系统能力,开发者可快速获取基础的系统、硬件信息、当前的运行时信息等,提升开发效率,助力开发更聚焦实际业务内容;
基础开发 SDK 聚焦于应用开发过程中,为开发者提供日志管理、封装字符串处理等能力,提升开发效率;

2 部署方式

openKylin 社区自研开发者套件下载使用时需提前添加 openSDK 源地址,安装步骤如下:

1软件源

deb http://archive.build.openKylin.top/openkylin/ yangtze main cross pty

deb http://archive.build.openKylin.top/openkylin/ yangtze-security main cross pty

deb http://archive.build.openKylin.top/openkylin/ yangtze-updates main cross pty

2配置后更新源

$ sudo apt update

3 系统能力 SDK

系统能力 SDK 中的每个软件包均表述了一个或一类系统能力,例如操作系统信息、硬件管理、系统内生安全策略、网络管理等;

安装命令:

$ sudo apt-get install libkysdk-system libkysdk-system-dev

3.1 系统信息

该层设计主要为应用提供与操作系统相关的功能接口,以自研、组合、封装三种方式,将与 OS 相关功能(如文件系统、硬件信息、通信等)以功能为角度重新实现;屏蔽系统差异、平台差异带来的开发复杂性与调试难度。

3.1.1 系统时间报时

当系统时间在整分或系统时间被修改时com.kylin.kysdk.TimeServer Dbus 服务会发出报时信号。

$ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libkysdk-systime libkysdk-systime-dev

1dbus 服务名称com.kylin.kysdk.TimeServer

2路径名称/com/kylin/kysdk/Timer

3Interfacescom.kylin.kysdk.TimeInterface

4信号

系统时间修改信号TimeChangeSignal

定时报时信号TimeSignal

系统时间修改报时

子模块编程语言声明描述
系统时间报时CVoid TimeChangeSignal(const char* t)当系统时间被修改时com.kylin.kysdk.TimeServerDbus服务会发出报时信号
参数说明返回值说明
t当前时间 如: "2021/09/26 21:13:28"

系统时间整分报时

子模块编程语言声明描述
系统时间报时Cvoid TimeSignal(const char* t)当系统时间在整分时com.kylin.kysdk.TimeServerDbus服务会发出报时信号
参数说明返回值说明
t当前时间 如: "2021/09/26 21:07:00"

3.1.2 获取硬件信息


$ sudo apt-get install libkysdk-hardware libkysdk-hardware-dev 

3.1.2.1 获取 CPU 信息

封装 C 接口获取 CPU 信息

1CMakeLists.txt 构建项目


aux_source_directory(. SOURCESCODE)

include_directories(.)

add_library(kyhw SHARED \${SOURCESCODE})

add_executable(kycpu-test test/kycpu-test.c)

target_link_libraries(kyhw kylog kyconf pthread systemd udev)

target_link_libraries(kycpu-test kyhw)

2获取硬件 CPU 信息,需要添加头文件:

#include "kysdk/kysdk-system/libkycpu.h"

获取 CPU 架构

子模块编程语言声明描述
获取CPU信息Cextern const char* kdk_cpu_get_arch()获取CPU架构
参数说明返回值说明
const char* 架构信息,如"x86_64"返回的是const char*不要free

获取 CPU 制造厂商

子模块 编程语言 声明 描述
获取CPU信息 C extern const char* kdk_cpu_get_vendor() 获取CPU制造商
参数说明 返回值说明
const char* 制造厂商字符串如“GenuineIntel”返回的是const char*不要free

获取 CPU 型号

子模块 编程语言 声明 描述
获取CPU信息 C extern const char* kdk_cpu_get_model() 获取CPU型号
参数说明 返回值说明
const char* CPU型号名称如“Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz”返回的是const char*不要free

获取 CPU 额定主频

子模块 编程语言 声明 描述
获取CPU信息 C extern const char* kdk_cpu_get_freq_MHz() 获取CPU额定主频
参数说明 返回值说明
const char* 额定主频赫兹数如“1794.742”单位是MHz返回的是const char*不要free

获取 CPU 核心数量

子模块 编程语言 声明 描述
获取CPU信息 C extern unsigned int kdk_cpu_get_corenums() 获取CPU核心数量
参数说明 返回值说明
unsigned int 所有可用的CPU核心数量

获取 CPU 对虚拟化的支持

子模块 编程语言 声明 描述
获取CPU信息 C const char* kdk_cpu_get_virt() 获取CPU对虚拟化的支持
参数说明 返回值说明
const char* 若CPU支持虚拟化则返回虚拟化技术如“vmx”若不支持返回NULL返回的是const char*不要free

3.1.2.2 获取网卡信息

封装 C 接口获取到网卡硬件信息。

1CMakeLists.txt 构建项目


aux_source_directory(. SOURCESCODE)

include_directories(.)

add_library(kyhw SHARED \${SOURCESCODE})

add_executable(kync-test test/kync-test.c)

target_link_libraries(kyhw kylog kyconf pthread systemd udev)

target_link_libraries(kync-test kyhw)

2获取网卡信息需要添加头文件

 #include "kysdk/kysdk-system/libkync.h"

获取系统中所有的网卡

子模块 编程语言 声明 描述
获取网卡信息 C extern char** kdk_nc_get_cardlist() 获取系统中所有的网卡
参数说明 返回值说明
char** 网卡名称列表由NULL字符串表示结尾由alloc生成需要被kdk_nc_freeall回收若获取出错返回NULL

检测指定网卡是否处于 UP 状态

子模块 编程语言 声明 描述
获取网卡信息 C extern int kdk_nc_is_up(const char *nc) 检测指定网卡是否处于UP状态
参数说明 返回值说明
nc网卡名称如eno1 int Up返回1Down返回0

获取系统中当前处于 link up 状态的网卡列表

子模块 编程语言 声明 描述
获取网卡信息 C extern char** kdk_nc_get_upcards() 获取系统中当前处于 link up 状态的网卡列表
参数说明 返回值说明
char** 网卡名称列表由NULL字符串表示结尾由alloc生成需要被kdk_nc_freeall回收若获取出错返回NULL

获取指定网卡的物理 MAC 地址

子模块 编程语言 声明 描述
获取网卡信息 C extern char* kdk_nc_get_phymac(const char *nc) 获取指定网卡的物理MAC地址
参数说明 返回值说明
nc网卡名称如eno1 char* 物理MAC地址由alloc生成应当被free若指定网卡不存在则返回NULL

获取指定网卡的第一个 IPv4 地址

子模块 编程语言 声明 描述
获取网卡信息 C extern char* kdk_nc_get_private_ipv4(const char *nc) 获取指定网卡的第一个IPv4地址
参数说明 返回值说明
nc网卡名称如eno1 char* IPv4地址获取出错或无IP返回NULL

获取指定网卡的所有 IPv4 地址

子模块 编程语言 声明 描述
获取网卡信息 C extern char** kdk_nc_get_ipv4(const char* nc) 获取指定网卡的所有IPv4地址
参数说明 返回值说明
nc网卡名称如eno1 char** IPv4地址列表以NULL表示结尾由alloc生成需要被kdk_nc_freeall回收若获取出错返回NULL

获取指定网卡的第一个 IPv6 地址

子模块 编程语言 声明 描述
获取网卡信息 C extern char* kdk_nc_get_private_ipv6(const char *nc) 获取指定网卡的第一个IPv6地址
参数说明 返回值说明
nc网卡名称如eno1 char* IPv6地址获取出错或无IP返回NULL

获取指定网卡的所有 IPv6 地址

子模块 编程语言 声明 描述
获取网卡信息 C extern char** kdk_nc_get_ipv6(const char *nc) 获取指定网卡的所有IPv6地址
参数说明 返回值说明
nc网卡名称如eno1 char** IPv6地址列表以NULL表示结尾由alloc生成需要被kdk_nc_freeall回收若获取出错返回NULL

获取指定网卡的有线/无线类型

子模块 编程语言 声明 描述
获取网卡信息 C extern int kdk_nc_is_wireless(const char *nc); 获取指定网卡的有线/无线类型
参数说明 返回值说明
nc网卡名称如eno1 0 : 有线
1 : 无线

获取指定网卡的厂商名称和设备型号

子模块编程语言声明描述
获取网卡信息Cextern int kdk_nc_get_vendor_and_product(const char *nc, char *vendor, char *product);获取指定网卡的厂商名称和设备型号
参数说明返回值说明
nc网卡名称如eno1vendor接受厂商名称的缓冲区product接受设备型号的缓冲区0 : 成功1 : 失败

回收字符串列表

子模块 编程语言 声明 描述
获取网卡信息 C extern inline void kdk_nc_freeall(char **ptr) 回收字符串列表
参数说明 返回值说明
ptr字符串列表

3.1.2.3 获取磁盘信息

封装 C 接口获取到网卡硬件信息。

1CMakeLists.txt 构建项目

 aux_source_directory(. SOURCESCODE)
add_library(kydiskinfo SHARED ${SOURCESCODE})
set_target_properties(kydiskinfo PROPERTIES VERSION 1.2.0 SOVERSION 1)
add_executable(test-getdiskinfo test/getdiskinfo.c)
add_executable(test-getdisklist test/getdisklist.c)
find_library(UDEV_LIB udev)
target_link_libraries(kydiskinfo blkid kylog pthread systemd kyconf ${UDEV_LIB})
target_link_libraries(test-getdiskinfo kydiskinfo)
target_link_libraries(test-getdisklist kydiskinfo)

2获取网卡信息需要添加头文件

 #include "kysdk/kysdk-system/libkydiskinfo.h"

获取系统中所有磁盘的列表

子模块 编程语言 声明 描述
获取磁盘信息 C extern char** kdk_get_disklist() 获取系统中所有磁盘的列表
参数说明 返回值说明
char** 每个字符串表示一个磁盘的绝对路径, 结尾以NULL字符表示结束

释放由 kdk_get_disklist 返回的磁盘列表

子模块 编程语言 声明 描述
获取磁盘信息 C extern void kdk_free_disklist(char** disklist) 释放由kdk_get_disklist返回的磁盘列表
参数说明 返回值说明
disklist 由kdk_get_disk_list返回的字符串指针

获取系统中指定磁盘的磁盘信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern kdk_diskinfo *kdk_get_diskinfo(const char *diskname) 获取指定磁盘的磁盘信息
参数说明 返回值说明
diskname指定磁盘名称应当是例如/dev/sda这种绝对路径或者是disklist中的某个元素 kdk_diskinfo* 该磁盘的详细信息,具体信息自取

释放由 kdk_get_diskinfo 返回的磁盘信息结构体

子模块 编程语言 声明 描述
获取磁盘信息 C extern void kdk_free_diskinfo(kdk_diskinfo *disk); 释放由kdk_get_diskinfo返回的磁盘信息结构体
参数说明 返回值说明
disk由kdk_get_diskinfo返回的结构体指针

3.1.2.4 获取 bios 信息

封装 C 接口获取到 bios 硬件信息。

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
include_directories(.)
add_library(kyhw SHARED ${SOURCESCODE})
add_executable(kybios-test test/kycpu-test.c)
target_link_libraries(kyhw kylog kyconf pthread systemd udev)
target_link_libraries(kybios-test kyhw)

2获取 bios 信息,需要添加头文件:

 #include "kysdk/kysdk-system/libkybiosinfo.h"

获取 bios 厂商信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_bios_get_vendor(); 获取bios厂商信息
参数说明 返回值说明
成功返回bios厂商失败返回null

获取 bios 版本信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_bios_get_version(); 获取bios版本信息
参数说明 返回值说明
成功返回bios版本失败返回null

释放内存

子模块 编程语言 声明 描述
获取磁盘信息 C extern void kdk_bios_free(char* info); 释放获取信息接口申请的内存
参数说明 返回值说明
获取信息接口返回的指针

3.1.2.5 获取主板信息

封装 C 接口获取到主板硬件信息。

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
include_directories(.)
add_library(kyhw SHARED ${SOURCESCODE})
add_executable(kyboard-test test/kycpu-test.c)
target_link_libraries(kyhw kylog kyconf pthread systemd udev)
target_link_libraries(kyboard-test kyhw)

2获取主板信息需要添加头文件

 #include "kysdk/kysdk-system/libkyboardinfo.h"

获取主板产品名称信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_board_get_name(); 获取主板产品名称
参数说明 返回值说明
成功返回主板产品名称失败返回null

获取主板生产日期

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_board_get_date(); 获取主板生产日期
参数说明 返回值说明
成功返回主板生产日期失败返回null

获取主板序列号

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_board_get_serial(); 获取主板序列号
参数说明 返回值说明
成功返回主板序列号失败返回null

获取主板厂商信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern const char *kdk_board_get_vendor(); 获取主板厂商信息
参数说明 返回值说明
成功返回主板厂商信息失败返回null

释放内存

子模块 编程语言 声明 描述
获取磁盘信息 C extern void kdk_board_free(char* info); 释放获取信息接口申请的内存
参数说明 返回值说明
获取信息接口返回的指针

3.1.2.6 获取 usb 设备信息

封装 C 接口获取到 usb 设备硬件信息。

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
include_directories(.)
add_library(kyhw SHARED ${SOURCESCODE})
add_executable(kyusb-test test/kyusb-test.c)
target_link_libraries(kyhw kylog kyconf pthread systemd udev)
target_link_libraries(kyusb-test kyhw)

2获取 usb 设备信息,需要添加头文件:

 #include "kysdk/kysdk-system/libkyusbinfo.h"

获取所有 usb 设备信息

子模块 编程语言 声明 描述
获取磁盘信息 C extern pDriverInfoList kdk_usb_get_list(); 获取usb设备信息
参数说明 返回值说明
pDriverInfoList : usb设备信息的结构体指针具体信息自取

释放内存

子模块 编程语言 声明 描述
获取磁盘信息 C extern void kdk_usb_free(pDriverInfoList list); 释放获取信息时申请的内存
参数说明 返回值说明
list:kdk_usb_get_list()返回的指针

3.1.3 获取包列表信息

封装 C 接口获取系统中所有的包信息。

$ sudo apt-get install libkysdk-package libkysdk-package-dev

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
include_directories(.)
add_library(kypackage SHARED ${SOURCESCODE})
add_executable(kypackage-test test/kypackage-test.c)
target_link_libraries(kypackage-test kypackage)

2获取包列表信息需要添加头文件

 #include "kysdk/kysdk-system/libkypackages.h"

获取系统中所有包列表

子模块 编程语言 声明 描述
获取包列表信息 C extern kdk_package_list* kdk_package_get_packagelist() 获取系统中所有包列表
参数说明 返回值说明
kdk_package_list* 包描述结构体列表返回的结构体需要由kdk_package_free_packagelist()回收

获取系统中指定包的版本号

子模块 编程语言 声明 描述
获取包列表信息 C extern char* kdk_package_get_version(const char *name) 获取系统中指定包的版本号
参数说明 返回值说明
name软件包名 char* 版本号由alloc生成需要被free若给定的包不存在则返回NULL

检测指定包名的软件包是否正确安装

子模块编程语言声明描述
获取包列表信息Cextern int kdk_package_is_installed(const char *name, const char *version)检测指定包名的软件包是否正确安装
参数说明返回值说明
name软件包名version版本号大部分情况下为NULL预留为snap做准备int 成功返回0失败返回错误码

3.1.4 获取资源信息

封装 C 接口获取到内存、swap 分区、cpu 的使用率。

$ sudo apt-get install libkysdk-proc libkysdk-proc-dev 

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
include_directories(.)
add_library(kyrtinfo SHARED ${SOURCESCODE})
add_executable(kyrtinfo-test test/kyrtinfo-test.c)
target_link_libraries(kyrtinfo-test kyrtinfo)

2获取包列表信息需要添加头文件

 #include "kysdk/kysdk-system/libkyrtinfo.h"

获取系统中物理内存总大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_res_total_KiB() 获取系统中物理内存总大小
参数说明 返回值说明
unsigned long 物理内存大小KiB为单位

获取物理内存使用率

子模块 编程语言 声明 描述
获取资源信息 C extern float kdk_rti_get_mem_res_usage_percent() 获取物理内存使用率
参数说明 返回值说明
float 物理内存使用率

获取物理内存使用大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_res_usage_KiB() 获取物理内存使用大小注意Buffer/Cache被计算为已使用内存
参数说明 返回值说明
unsigned long 物理内存使用大小KiB为单位

获取实际可用的物理内存大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_res_available_KiB() 获取实际可用的物理内存大小该数值约等于Free + Buffer + Cache
参数说明 返回值说明
unsigned long 可用物理内存大小KiB为单位

获取实际空闲的物理内存大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_res_free_KiB() 获取实际空闲的物理内存大小注意Buffer/Cache被计算为已使用内存
参数说明 返回值说明
unsigned long 空闲的物理内存大小KiB为单位

获取所有应用申请的虚拟内存总量

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_virt_alloc_KiB() 获取所有应用申请的虚拟内存总量
参数说明 返回值说明
unsigned long 虚拟内存总申请量KiB为单位

获取系统中 Swap 分区总大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_swap_total_KiB() 获取系统中Swap分区总大小
参数说明 返回值说明
unsigned long Swap分区大小KiB为单位

获取 Swap 分区使用率

子模块 编程语言 声明 描述
获取资源信息 C extern float kdk_rti_get_mem_swap_usage_percent() 获取Swap分区使用率
参数说明 返回值说明
float Swap分区使用率

获取 Swap 分区使用量

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_swap_usage_KiB() 获取Swap分区使用量
参数说明 返回值说明
unsigned long Swap分区使用量KiB为单位

获取 Swap 分区空闲大小

子模块 编程语言 声明 描述
获取资源信息 C extern unsigned long kdk_rti_get_mem_swap_free_KiB() 获取Swap分区空闲大小
参数说明 返回值说明
unsigned long Swap分区空闲大小KiB为单位

获取 CPU 瞬时使用率

子模块 编程语言 声明 描述
获取资源信息 C extern float kdk_rti_get_cpu_current_usage() 获取CPU瞬时使用率
参数说明 返回值说明
float CPU瞬时使用率该值 < 1.00

获取操作系统开机时长

子模块 编程语言 声明 描述
获取资源信息 C extern int kdk_rti_get_uptime(unsigned int *day, unsigned int *hour, unsigned int *min, unsigned int *sec) 获取操作系统开机时长
参数说明 返回值说明
day开机天数
hour小时数该数值一定 < 24
min分钟数该数值一定 < 60
sec秒数该数值一定 < 60
int 返回0表示成功返回非零表示失败

获取指定进程的 CPU 使用率

子模块 编程语言 声明 描述
获取资源信息 C extern float kdk_get_process_cpu_usage_percent(int proc_num) 获取指定进程的CPU使用率
参数说明 返回值说明
proc_num进程号 float CPU使用率

获取指定进程的内存占用率

子模块 编程语言 声明 描述
获取资源信息 C extern float kdk_get_process_mem_usage_percent(int proc_num) 获取指定进程的内存占用率
参数说明 返回值说明
proc_num进程号 float 内存占用率

获取指定进程的进程状态

子模块 编程语言 声明 描述
获取资源信息 C extern char* kdk_get_process_status(int proc_num) 获取指定进程的进程状态
参数说明 返回值说明
proc_num进程号 char* 进程状态

获取指定进程的端口号占用

子模块 编程语言 声明 描述
获取资源信息 C extern int kdk_get_process_port(int proc_num) 获取指定进程的端口号占用
参数说明 返回值说明
proc_num进程号 char* 使用的端口号

获取指定进程的启动时间

子模块 编程语言 声明 描述
获取资源信息 C extern char* kdk_get_process_start_time(int proc_num) 获取指定进程的启动时间
参数说明 返回值说明
proc_num进程号 char* 启动时间

获取指定进程的运行时间

子模块 编程语言 声明 描述
获取资源信息 C extern char* kdk_get_process_running_time(int proc_num) 获取指定进程的运行时间
参数说明 返回值说明
proc_num进程号 char* 运行时间

获取指定进程的 cpu 时间

子模块 编程语言 声明 描述
获取资源信息 C extern char* kdk_get_process_cpu_time(int proc_num) 获取指定进程的cpu时间
参数说明 返回值说明
proc_num进程号 char* cpu时间

获取指定进程的 Command

子模块 编程语言 声明 描述
获取资源信息 C extern char* kdk_get_process_command(int proc_num) 获取指定进程的Command
参数说明 返回值说明
proc_num进程号 char* Command

获取指定进程的属主

子模块编程语言声明描述
获取资源信息Cextern char* kdk_get_process_user(int proc_num)获取指定进程的属主
参数说明返回值说明
proc_num进程号char* 属主

获取指定进程的CPU使用率

子模块编程语言声明描述
获取资源信息Cextern float kdk_procname_get_process_cpu_usage_percent(char *proc_name)获取指定进程的CPU使用率
参数说明返回值说明
proc_name 进程名float CPU使用率

获取指定进程的信息

子模块编程语言声明描述
获取资源信息Cextern char** kdk_procname_get_process_infomation(char *proc_name)获取指定进程的信息
参数说明返回值说明
proc_name 进程名char** 进程的信息列表以NULL表示结尾由alloc生成需要被kdk_proc_freeall回收若获取出错返回NULL

获取进程所有信息

子模块编程语言声明描述
获取资源信息Cchar** kdk_get_process_all_information()获取进程所有信息
参数说明返回值说明
char** 进程所有信息列表以NULL表示结尾由alloc生成需要被kdk_proc_freeall回收若获取出错返回NULL

回收字符串列表

子模块编程语言声明描述
获取资源信息Cextern inline void kdk_proc_freeall(char **ptr)回收字符串列表
参数说明返回值说明
ptr字符串列表

3.1.5 获取操作系统基础信息

封装 C 接口获取系统名称、版本号、激活信息等。

$ sudo apt-get install libkysdk-sysinfo libkysdk-sysinfo-dev 

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)

include_directories(.)

find_library(GLIBC_LIB glib-2.0)

find_library(DBUS_LIB dbus-1)

find_library(DBUS_GLIB_LIB dbus-glib-1)

add_library(kysysinfo SHARED ${SOURCESCODE})

add_executable(kysysinfo-test test/kysysinfo_test.c)

target_link_libraries(kysysinfo kylin-activation kylog systemd kyconf

${GLIBC_LIB} ${DBUS_LIB} ${DBUS_GLIB_LIB})

target_link_libraries(kysysinfo-test kysysinfo)

2获取操作系统信息需要添加头文件

 #include "kysdk/kysdk-system/libkysysinfo.h"

获取操作系统架构信息

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_architecture() 获取系统架构信息
参数说明 返回值说明
char* 系统架构x86_64

获取操作系统名称

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_systemName() 获取操作系统名称
参数说明 返回值说明
char* 系统名称Kylin

获取操作系统版本号

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_version(bool verbose) 获取系统版本号
参数说明 返回值说明
verbose0获取简略版本号1获取详细版本号 char* 系统版本号系统简略版本xxxx桌面操作系统系统详细版本Desktop-V10-Professional-Release-Build1-210203

获取内核版本号

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_kernelVersion() 获取内核版本号
参数说明 返回值说明
char* 成功返回字符串失败返回NULL。返回的字符串需要被 free 释放

获取当前登录用户的用户名

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_eUser() 获取当前登录用户的用户名Effect User
参数说明 返回值说明
char* 成功返回字符串失败返回NULL。返回的字符串需要被 free 释放

获取操作系统项目编号名

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_projectName() 获取操作系统项目编号名
参数说明 返回值说明
char* 成功返回字符串失败返回NULL。返回的字符串需要被 free 释放

获取操作系统项目子编号名

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_projectSubName() 获取操作系统项目子编号名
参数说明 返回值说明
char* 成功返回字符串失败返回NULL。返回的字符串需要被 free 释放

获取操作系统产品标识码

子模块 编程语言 声明 描述
获取系统基础信息 C extern unsigned int kdk_system_get_productFeatures() 获取操作系统产品标识码
参数说明 返回值说明
unsigned int 返回标志码
0000信息异常
0001仅PC特性
0010仅平板特性
0011支持平板与PC特性

获取操作系统宿主机的虚拟机类型

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_hostVirtType() 获取操作系统宿主机的虚拟机类型
参数说明 返回值说明
char* 获取失败返回NULL获取成功返回一个字符串字符串内容如下
[none, qemu, kvm, zvm, vmware,hyper-v, orcale virtualbox, xen, bochs, uml,parallels,bhyve,qnx,arcn,openvz,lxc,lxc-libvirt,systemd-nspawn,docker,podman,rkt,wsl]

获取操作系统宿主机的云平台类型

子模块 编程语言 声明 描述
获取系统基础信息 C extern char* kdk_system_get_hostCloudPlatform() 获取操作系统宿主机的云平台类型
参数说明 返回值说明
char* 获取失败返回NULL获取成功返回一个字符串字符串内容如下
[none, huawei]

判断当前操作系统是否为专用机系统

子模块 编程语言 声明 描述
获取系统基础信息 C extern bool kdk_system_is_zyj(void) 判断当前镜像系统否为专用机系统
参数说明 返回值说明
bool
true代表是
false代表不是

获取系统分辨率信息

子模块 编程语言 声明 描述
获取系统基础信息 C extern char** kdk_system_get_resolving_power() 获取系统分辨率信息
参数说明 返回值说明
char** 分辨率信息列表以NULL表示结尾由alloc生成需要被kdk_resolving_freeall回收若获取出错返回NULL

回收字符串列表

子模块 编程语言 声明 描述
获取系统基础信息 C extern inline void kdk_resolving_freeal(char **ptr) 回收字符串列表
参数说明 返回值说明
ptr字符串列表

3.1.6 获取网络信息

获取网络连接状态

子模块 编程语言 声明 描述
获取系统基础信息 dbus接口 bus: system bus
name : org.freedesktop.NetworkManager
path: org.freedesktop.NetworkManager
method: state()->int arg0; 获取网络连接状态。
参数说明 返回值说明
int 网络连接状态

获取网络端口状态

子模块编程语言声明描述
获取系统基础信息Cextern int kdk_net_get_port_stat(int port);获取端口状态
参数说明返回值说明
port 端口号int 端口状态FREE0TCP_ESTABLISHED:1 TCP_SYN_SENT:2 TCP_SYN_RECV:3 TCP_FIN_WAIT1:4 TCP_FIN_WAIT2:5 TCP_TIME_WAIT:6 TCP_CLOSE:7 TCP_CLOSE_WAIT:8 TCP_LAST_ACL:9 TCP_LISTEN:10 TCP_CLOSING:11

获取多个网络端口状态

子模块编程语言声明描述
获取系统基础信息Cint kdk_net_get_multiple_port_stat(int start, int end, int *result)获取[start,end]的端口状态
参数说明返回值说明
start 开始端口号end 结束端口号result 具有足够空间的int数组。接受端口状态成功返回0失败返回 端口状态

获取默认网关

子模块编程语言声明描述
获取系统基础信息Cextern prouteMapList kdk_net_get_route();获取默认网关
参数说明返回值说明
prouteMapList 网管信息具体信息自取失败返回NULL

获取防火墙状态

子模块编程语言声明描述
获取系统基础信息Cextern pChain kdk_net_get_iptable_rules()获取防火墙信息
参数说明返回值说明
pChain 防火墙信息具体信息自取失败返回NULL

3.1.7 获取系统运行时信息

封装 C++类获取网速、cpu 温度、硬盘温度等。

$ sudo apt-get install libkyrealtimeinfo libkyrealtimeinfo-dev

1CMakeLists.txt 构建项目

include_directories("smartctl/")
aux_source_directory(./smartctl CODE)
add_library(kyrealtime SHARED libkyrealtimeinfo.cpp libkyrealtimeinfo.h ${CODE})
set_target_properties(kyrealtime PROPERTIES VERSION 1.2.0 SOVERSION 1)

add_executable(realtimetest test/getrealtimeinfo.cpp)
target_link_libraries(realtimetest kyrealtime)

2获取操作系统运行时信息需要添加头文件

#include "kysdk/kysdk-system/libkyrealtimeinfo.h"

获取瞬时网速

子模块编程语言声明描述
获取系统基础信息C++RealTimeInfo::float kdk_real_get_net_speed();获取瞬时网速
参数说明返回值说明
float瞬时网速

获取cpu温度

子模块编程语言声明描述
获取系统基础信息C++RealTimeInfo::float kdk_real_get_cpu_temperatu();获取瞬时cpu温度
参数说明返回值说明
floatcpu瞬时温度

获取硬盘温度

子模块编程语言声明描述
获取系统基础信息C++RealTimeInfo::float kdk_real_get_disk_temperatu(const char * name);获取瞬时硬盘温度
参数说明返回值说明
name硬盘绝对路径float指定硬盘瞬时温度

获取磁盘转速

子模块编程语言声明描述
获取系统基础信息C++RealTimeInfo::int kdk_real_get_disk_rate(const char *name);获取磁盘转速
参数说明返回值说明
name硬盘绝对路径int指定磁盘转速

3.1.8 获取当前地理信息

封装 C 接口获取当前 ip 地址地理信息。

$ sudo apt-get install libkylocation libkylocation-dev

1CMakeLists.txt 构建项目

include_directories("/usr/include/python3.8")
add_library(kylocation SHARED libkylocation.c)
set_target_properties(kylocation PROPERTIES VERSION 1.2.0 SOVERSION 1)
target_link_libraries(kylocation -lpython3.8)
add_executable(locationtest test/getlocation.c)
target_link_libraries(locationtest kylocation)

2获取 IP 地址地理信息,需要添加头文件:

#include "kysdk/kysdk-system/libkylocation.h"

获取本机地理位置

子模块 编程语言 声明 描述
获取系统基础信息 C extern char *kdk_loaction_get(); 获取本机的地理位置
参数说明 返回值说明
描述地理位置的json字符串

3.2 电源管理

该层设计主要为应用电源管理接口。

3.2.1 锁屏设置

封装 C++接口提供锁屏设置能力。

设置禁止锁屏

子模块 编程语言 声明 描述
电源管理模块 C++ uint32_t kdk_set_inhibit_lockscreen(const char *appName , const char *reason) 设置禁止锁屏
参数说明 返回值说明
appName应用名
reason禁止锁屏原因
0: 失败
>0: 成功(大于0)

取消禁止锁屏

子模块 编程语言 声明 描述
电源管理模块 C++ int kdk_un_inhibit_lockscreen(uint32_t flag) 取消禁止锁屏
参数说明 返回值说明
flag禁止锁屏接口的返回值 0: 成功
-1: 失败

3.3 文件管理

该模块设计主要为开发者监控文件系统中文件变化,提供接口定义;减少

系统版本间由于部分文件系统变化而导致的差异;

安装方式:

 $ sudo apt install libkysdk-filesystem libkysdk-filesystem-dev
声明 描述
QStringList addWatchTargetRecursive(QString url, FileWatcherType type = PERIODIC, int attr = OPEN` CLOSE
QStringList addWatchTargetListRecursive(QStringList urlList, FileWatcherType type = PERIODIC, int attr = OPEN` CLOSE
QStringList removeWatchTargetRecursive(QString url, int maxdepth = 5, int recurType = ALLFILE); 从监听列表中移除指定的文件
void clearWatchList(); 清空监听列表
void pauseWatcher(); 暂停文件监听
void restartWatcher(); 恢复文件监听

3.4 AI 能力

该层设计主要为应用提供 AI 识别功能接口,为 OS 增加 OCR 文字识别功能;屏蔽需

引入 AI 功能带来的开发复杂性与调试难度。

3.4.1 OCR 文字识别功能

封装 C++接口提供 OCR 文字识别功能。

获取文字框

子模块 编程语言 声明 描述
OCR文字识别功能 C++ Std::vector<std::vector<std::vector>> kdk::kdkOCR::getRect(const std::string &imagePath) 获取文字框
参数说明 返回值说明
String 图片文件路径 Vector<vector<vector<vector
文字框点的坐标矩阵、以及文字框的个数

获取文字内容

子模块 编程语言 声明 描述
OCR文字识别功能 C++ Std::vector<std::vector>>getCls(const std::string &imagePath,int nums) 获取文字内容
参数说明 返回值说明
String 图片文件路径
Vector图片中的文字字符串
Int nums 同时处理的文字栈个数

3.5 打印机管理

该层主要为应用提供打印机管理接口,可以实现打印任务的下发,打印方式,打印任

务的取消。

获取系统打印机列表

子模块 编程语言 声明 描述
打印机管理 C extern char** kdk_printer_get_list(); 获取打印机列表
参数说明 返回值说明
char ** 系统打印机列表

获取系统可用打印机列表

子模块 编程语言 声明 描述
打印机管理 C extern char** kdk_printer_get _availablelist(); 获取可用打印机列表
参数说明 返回值说明
char ** 系统打印机列表

设置打印参数

子模块 编程语言 声明 描述
打印机管理 C extern void kdk_printer_set_options(int number_up,const char *media,const char *number_up_layout,const char *sides); 设置打印参数
参数说明 返回值说明
number_up一张纸打印几页
media纸张类型
number_up_layoutcups属性如lrtb
sides单面one-sided双面长边翻转two_sided_long_dege
双面(短边翻转):
two_sided_short_dege

打印文件

子模块 编程语言 声明 描述
打印机管理 C extern int kdk_printer_print_local_file(const char *printername, char *filepath); 打印文件
参数说明 返回值说明
printername: 打印机名
filepath打印文件绝对路径
int 打印作业的id

取消打印作业

子模块 编程语言 声明 描述
打印机管理 C extern int kdk_printer_cancel_all_jobs(const char *printername); 取消打印作业
参数说明 返回值说明
printername打印机名 int
成功0
失败:-1

获取打印机状态

子模块 编程语言 声明 描述
打印机管理 C extern int kdk_printer_get_status(const char *printername); 获取打印机状态
参数说明 返回值说明
printername打印机名 打印机状态码

从url中解析下载的文件名

子模块 编程语言 声明 描述
打印机管理 C extern void kdk_printer_get_filename(const char *url, char *filename); 从url解析下载的文件名
参数说明 返回值说明
url下载链接
filename解析出来的文件名

获取当前打印任务状态

子模块 编程语言 声明 描述
打印机管理 C extern int kdk_printer_get_job_status(const char *printername, int jobid); 获取当前打印任务状态
参数说明 返回值说明
printername打印机名 打印任务状态码

下载网络文件到本地

子模块 编程语言 声明 描述
打印机管理 C extern int kdk_printer_print_download_remote_file(const char *url, const char *filepath); 下载网络文件到本地
参数说明 返回值说明
url网络文件 下载状态码
filepath要保存的文件路径用户自定义

4 应用支撑 SDK

openSDK 应用支撑层中,所有的包均为向图形化应用提供图形化开发功能,例如图形化控件、主题风格等;该层通常与某个特定的开发框架有所绑定 如 QT 、 GTK 应 用 支 撑层 SDK 安装时需安装 两个虚包libkysdk-application、libkysdk-applications-dev其他包按照功能分类生成多个实包比如QT 控件类: libkysdk-qtwidgetswayland 显示协议兼容接口 libkysdk-waylandhelper应用通用模块 libkysdk-kabase 等。

安装命令:

$ sudo apt install libkysdk-applications libkysdk-applications-dev

4.1 QT 自研控件模块

QT 自研控件模块 kysdk-qtwidgets 属于 kysdk-application 的子模块,安装方式如下:

sudo apt install libkysdk-qtwidgets libkysdk-qtwidgets-dev

根据不同项目类型,可参考以下 demo

1.pro 文件构建项目

qt 项目.pro 文件中增加:

CONFIG += link_pkgconfig
PKGCONFIG += kysdk-qtwidgets

2CMakeLists.txt 构建项目

cmake_minimum_required(VERSION 3.5)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(KYSDKQTWIDGETS_PKG kysdk-qtwidgets)
target_include_directories(demo PRIVATE ${KYSDKQTWIDGETS_PKG_INCLUDE_DIRS})
target_link_directories(demo PRIVATE ${KYSDKQTWIDGETS_PKG_LIBRARY_DIRS})
target_link_libraries(demo Qt5::Widgets ${KYSDKQTWIDGETS_PKG_LIBRARIES})

在具体项目中,需在代码中引入对应的头文件以及命名空间,如:

#include "kwidget.h"
using namespace kdk;

部分控件用到翻译文件,可以在 main()函数中加载翻译文件,目前支持中

文、藏文、英文三种语言,翻译文件已经编进动态库中,加载方式如下:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator trans;
    QString locale = QLocale::system().name();
    if(locale == "zh_CN")
    {
        if(trans.load(":/translations/gui_zh_CN.qm"))
        {
            a.installTranslator(&trans);
        }
    }
    if(locale == "bo_CN")
    {
        if(trans.load(":/translations/gui_bo_CN.qm"))
        {
            a.installTranslator(&trans);
        }
    }
    Widget w;
    w.show();
    return a.exec();
}

4.1.1 窗体模块

4.1.1.1 基础窗体

功能描述KWidget继承自 QWidget,支持响应主题背景切换,响应图标主

题切换,标题颜色响应窗口激活状态,窗口按钮样式符合 ukui3.1 的设计风格,

分 为 四 个 组 成 部 分 iconBar,windowButtonBar,sideBar,baseBar 。

iconBar,windowButtonBar 默认高度为 40pxsideBar 默认宽度为 200px。

输入图片说明 输入图片说明

枚举类型 LayoutType { VerticalType, HorizontalType, MixedType }

VerticalType上下结构

HorizontalType左右结构

MixedType过渡结构

声明 描述
QWidget* sideBar(); 获取左边栏widget,通过setlayout添加自定义内容。
QWidget* baseBar(); 获取主内容区widget,通过setlayout添加自定义内容。
void setIcon(const QIcon& icon); 通过icon添加窗体图标
void setIcon(const QString& iconName); 设置窗体图标iconName 需要直接指定系统目录中的图标名称,如"kylin-music"。
void setWidgetName(const QString& widgetName); 设置窗体名称。
KWindowButtonBar* windowButtonBar(); 获取窗口三联组合控件,以控制是否显示最大化、最小化按钮和下拉菜单按钮。
KIconBar* iconBar(); 获取窗口标题、图标组合控件,以控制相关样式。
void setLayoutType(LayoutType type); 设置布局结构类型。

4.1.1.2 KBubbleWidget

功能描述KBubbleWidget继承自 QWidget是一个带有气泡尾部的窗

体,可以指定气泡尾部的尺寸、显示方向和显示位置,还可以设置窗体的圆

角、毛玻璃以及透明度。自 2.0.0.0 版本启用。

枚举类型enum TailDirection{ TopDirection, LeftDirection, BottomDirection, RightDirection, None };
enum TailLocation{ LeftLocation, MiddleLocation, RightLocation };

TailDirection气泡尾部的显示方向

TailLocation指定气泡尾部的显示位置

声明 描述
void setTailSize(const QSize& size); 设置气泡尾部尺寸
QSize tailSize(); 获取气泡尾部尺寸
void setTailPosition(TailDirection dirType, TailLocation locType=MiddleLocation); 设置气泡尾部显示位置
TailDirection tailDirection(); 获取气泡尾部显示方向(左、上、右、下)
TailLocation tailLocation(); 获取气泡尾部显示位置(居左、居中、居右)
void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight); 设置窗体圆角半径
void setBorderRadius(int radius); 设置窗体圆角半径
void setEnableBlur(bool flag); 设置是否启用毛玻璃效果
bool enableBlur(); 获取是否已启用毛玻璃效果
void setOpacity(qreal opacity); 设置透明度
qreal opacity(); 获取透明度

4.1.2 对话框模块

4.1.2.1 基础对话框

功能描述KDialog继承自 QDialog 支持响应主题背景切换,相应图标主

题切换,窗口按钮样式符合 ukui3.1 的设计风格,标题颜色响应窗口激活状态。

声明 描述
void setWindowIcon(const QIcon &icon); 设置对话框图标
void setWindowIcon(const QString& iconName); 直接根据图标名称设置窗口图标例如dialog->setWindowIcon("kylin-music");
void setWindowTitle(const QString &); 设置对话框标题名称
QPushButton* maximumButton(); 获取最大化按钮
QPushButton* minimumButton(); 获取最小化按钮
QPushButton* closeButton(); 获取关闭按钮
KMenuButton* menuButton(); 获取下拉菜单按钮,默认是隐藏的,不显示。
QWidget* mainWidget(); 获取主内容区通过setLayout()添加内容。例如dialog->mainWidget()->setLayout(hLayout);

4.1.2.2 关于对话框

功能描述KAboutDialog包含的主要内容有应用图标应用名称版本

号,团队邮箱以及具体的应用描述,注意,默认应用描述是不显示的。可以通

过 setBodyTextVisible(bool)控制其是否需要显示。

输入图片说明

输入图片说明

声明 描述
void setAppIcon(const QIcon& icon); 设置应用程序图标
void setAppName(const QString& appName); 设置应用程序名称
QString appName(); 获取应用程序名称
void setAppVersion(const QString& appVersion); 设置应用程序版本号
QString appVersion(); 获取应用程序版本号
void setBodyText(const QString& bodyText); 设置应用程序具体的说明内容
QString bodyText(); 获取应用程序具体的说明内容
void setAppSupport(const QString& appSupport); 设置服务与支持邮箱,有默认缺省
QString appSupport(); 获取服务与支持邮箱
void setBodyTextVisiable(bool flag); 设置是否显示说明内容
void setAppPrivacyLabelVisible(bool flag); 设置隐私按钮是否可见自1.2.0.10版本启用)
bool AppPrivacyLabelIsVisible(); 返回隐私按钮是否可见自1.2.0.10版本启用)

4.1.2.3 输入对话框

功能描述:输入对话框 KInputDialog继承自 QDialog参考 QInputDialog

源码,对子控件布局以及样式进行了调整,功能同 QInputDialog。

(1)QString KInputDialog::getText(QWidget *parent,const QString &label,

QLineEdit::EchoMode mode, const QString &text,bool *ok,

Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)

文本输入对话框,同 QInputDialog

输入图片说明

(2)QString KInputDialog::getMultiLineText(QWidget *parent,const QString&label,

const QString &text, bool *ok, Qt::WindowFlags flags,

Qt::InputMethodHints inputMethodHints)

多行文本输入框,同 QInputDialog

输入图片说明

(3)

int KInputDialog::getInt(QWidget *parent,const QString &label, int value,
int min, int max, int step, bool *ok, Qt::WindowFlags flags)

整型数字输入对话框,同 QInputDialog

输入图片说明

(3)

double KInputDialog::getDouble(QWidget *parent,const QString &label,
double value, double minValue, double maxValue, 
int decimals, bool *ok, Qt::WindowFlags flags)

浮点型数字输入对话框,同 QInputDialog

输入图片说明

枚举类型

enum InputDialogOption { NoButtons, UseListViewForComboBoxItems, UsePlainTextEditForTextInput }
flags InputDialogOptions
enum InputMode { TextInput, IntInput, DoubleInput }
常量 描述
QInputDialog::NoButtons 不显示确定和取消按钮
QInputDialog::UseListViewForComboBoxItems 使用QListView而不是不可编辑的QComboxItems来显示使用SetComboxItems设置的项目。
QInputDialog::UsePlainTextEditForTextInput 使用QPlainTextEdit进行多行文本输入。在这个值中在5.2中被引入。
常量 描述
QInputDialog::TextInput 用于输入文本字符串。
QInputDialog::IntInput 用于输入整数。
QInputDialog::DoubleInput 用于以双精度输入的浮点数。
声明 描述
void setInputMode(InputMode mode); 设置输入模式
InputMode inputMode() const; 获取输入模式
void setLabelText(const QString &text); 设置标签文本
QString labelText() const; 获取标签文本
void setOption(InputDialogOption option, bool on = true); 设置选项
bool testOption(InputDialogOption option) const; 测试选项
void setOptions(InputDialogOptions options); 设置选项
InputDialogOptions options() const; 获取输入框选项
void setTextValue(const QString &text); 设置文本值
QString textValue() const; 获取文本值
void setTextEchoMode(QLineEdit::EchoMode mode); 设置文本模式
QLineEdit::EchoMode textEchoMode() const; 获取文本模式
void setComboBoxEditable(bool editable); 设置组合框可编辑
bool isComboBoxEditable() const; 返回组合框是否可以编辑
void setComboBoxItems(const QStringList &items); 设置组合框项目
QStringList comboBoxItems() const; 返回组合框列表
void setIntValue(int value); 设置int类型的值
int intValue() const; 获取int类型的值
void setIntMinimum(int min); 设置int类型的最低值
int intMinimum() const; 获取int最低值
void setIntMaximum(int max); 设置int类型最大值
int intMaximum() const; 获取int最大值
void setIntRange(int min, int max); 设置int范围
void setIntStep(int step); 设置int步数
int intStep() const; 获取int步数
void setDoubleValue(double value); 设置double值
double doubleValue() const; 获取double值
void setDoubleMinimum(double min); 设置double最小值
double doubleMinimum() const; 获取double最小值
void setDoubleMaximum(double max); 设置double最大值
double doubleMaximum() const; 获取double最大值
void setDoubleRange(double min, double max); 设置double范围
void setDoubleDecimals(int decimals); 设置两个小数
int doubleDecimals() const; 返回小数位数
void setOkButtonText(const QString &text); 设置确认按钮文本
QString okButtonText() const; 获取确认按钮文本
void setCancelButtonText(const QString &text); 设置取消按钮文本
QString cancelButtonText() const; 获取取消按钮文本
void open(QObject *receiver, const char *member); 此函数将其信号之一连接到接收器和成员指定的插槽。特定信号取决于在成员中指定的参数。
void setVisible(bool visible) override; 设置是否可见
QSize minimumSizeHint() const override; 最小尺寸提示
QSize sizeHint() const override; 尺寸提示
static QString getText(QWidget *parent,const QString &label,QLineEdit::EchoMode echo = QLineEdit::Normal,const QString &text = String(), bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags(),Qt::InputMethodHints inputMethodHints = Qt::ImhNone); 获取文本
static QString getMultiLineText(QWidget *parent,const QString &label,const QString &text = QString(), bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags(),Qt::InputMethodHints inputMethodHints = Qt::ImhNone); 获取多行文本
static QString getItem(QWidget *parent,const QString &label,const QStringList &items, int current = 0, bool editable = true,bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(),Qt::InputMethodHints inputMethodHints = Qt::ImhNone); 获取项目
static int getInt(QWidget *parent,const QString &label, int value = 0,int minValue = -2147483647, int maxValue = 2147483647,int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) 获取int型文本
static double getDouble(QWidget *parent,const QString &label,double value = 0, double minValue = -2147483647,double maxValue = 2147483647, int decimals = 1, bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags()); 获取double类型文本
void setDoubleStep(double step); 设置double步数
double doubleStep() const; 获取double步数
void setPlaceholderText(const QString &); 设置PlaceholderText的文本内容自1.2.0.12启用)
QString placeholderText() const; 获取PlaceholderText的文本内容自1.2.0.12启用)

4.1.2.4 进度对话框

功能描述KProgressDialog继承自 QDialog参考 QProgressDialog 源码, 对子控件 ProgressBar 的样式进行了调整。可以设置具体下载信息是否需要显示,设置进度值的后缀等。

KProgressDialog *progress2 = new KProgressDialog(tr("下载"),tr("取消"),0,100,this);
progress2->setSubContent("下载中...");
progress2->setSuffix("MB");
progress2->setWindowTitle("进度对话框");
progress2->setWindowIcon("kylin-music");
progress2->setValue(50);
progress2->setShowDetail(false);

输入图片说明

输入图片说明

声明 描述
void setLabel(QLabel *label); 将标签设置给label。进度对话框会调整大小以适应。标签成为进度对话框的所有权必要时将被删除所以不要在堆栈中传递对象的地址。
void setCancelButton(QPushButton *button); 将取消按钮设置给按钮cancelButton。进度对话框拥有这个按钮的所有权这个按钮在必要时将被删除所以不要传递堆栈中的对象的地址用new()来创建按钮。如果传递nullptr将不会显示取消按钮。
void setBar(QProgressBar *bar); 将进度条部件设置给bar。进度对话框会调整大小以适应。进度条对话框拥有进度条的所有权该进度条将在必要时被删除所以不要使用分配在堆栈中的进度条。
void setSuffix(const QString& suffix); 设置detail的后缀
void setShowDetail(bool flag); 设置是否显示详细信息
int minimum() const; 返回最小值
int maximum() const; 返回最大值
int value() const 返回当前值
QString labelText() const; 返回提示内容
void setAutoReset(bool reset); 设置进度对话框是否在value()等于maximum()时立即调用reset()默认为true。
bool autoReset() const; 返回是否自动重置
void setAutoClose(bool close); 设置是否自动关闭对话框
bool autoClose() const; 返回是否自动关闭对话框
QProgressBar* progressBar(); 获取进度条
void cancel() 取消进度条。
void reset() 重置进度条。
void setMaximum(int maximum) 设置进度条所代表的最高值默认值是100。
void setMinimum(int minimum) 设置进度条所代表的最小值默认值是0。
void setRange(int minimum, int maximum) 设置进度条范围如果最大值小于最小值则最小值成为唯一的合法值。如果当前值超出了新的范围则用reset()重置进度框。
void setValue(int progress) 设置当前进度值。
void setLabelText(const QString &text) 设置提示标签文本。
void setCancelButtonText(const QString &text) 设置取消按钮文本。
void setSubContent(const QString &text) 设置次级内容。

4.1.2.5 程序卸载对话框

功能描述KUninstallDialog代码整合自麒麟安装器支持显示应用图

标,应用名称,包名,版本号等信息,不包括具体的卸载行为。使用时只需传

入包名以及版本后两个参数即可。

KUninstallDialog *uninstallDialog = new KUninstallDialog("browser360-cn-stable","104",this);

输入图片说明

声明 描述
QLabel* debAppNameLabel(); 获取应用名称的label
QLabel* debNameLabel(); 获取包名的label
QLabel* debIconLabel(); 获取应用图标的label
QLabel* debVersionLabel(); 获取包版本的label
QPushButton* uninstallButtton(); 获取卸载按钮pushbutton

4.1.3 输入框模块

4.1.3.1 密码输入框

功能描述KPasswordEdit支持切换输入内容明文/暗文的切换,支持设置

密码校验结果(正常输入为蓝色边框,设置密码正确为绿色边框,密码错误为

红色边框),支持 loading 状态,支持设置是否启用 clearButton。

输入图片说明

枚举类型

enum  LoginState{Ordinary,LoginSuccess,LoginFailed}
声明 描述
void setState(LoginState state); 设置登录状态
LoginState state(); 返回登录状态
void setLoading(bool flag); 设置是否启用加载状态。
bool isLoading(); 判断是否处于加载状态
QString placeholderText(); 返回placeholderText的文本内容
void setPlaceholderText(QString&text); 设置PlaceholderText的文本内容
void setClearButtonEnabled(bool enable); 设置是否启用ClearButton
bool isClearButtonEnabled() const; 返回是否启用了ClearButton
void setEchoModeBtnVisible(bool enable); 设置EchoModeBtn是否可见
bool echoModeBtnVisible(); 返回EchoModeBtn是否可见
void setClearBtnVisible(bool enable); 设置ClearBtn是否可见
bool clearBtnVisible(); 返回ClearBtn是否可见
void setEnabled(bool); 设置KLineEdit是否可用

4.1.3.2 搜索输入框

功能描述:可以设置 placeHolder 的文字内容及对齐方式,输入文字的对齐

方式,是否启用清除按钮等。

输入图片说明

声明 描述
void setEnabled(bool); 设置是否可用
bool isEnabled(); 返回是否可用
void setClearButtonEnabled(bool enable); 设置是否显示清除按钮
bool isClearButtonEnabled() const; 返回是否显示清除按钮
QStringplaceholderText() const; 返回placeholder
void setPlaceholderText(const QString &); 设置placeholder的文本
Qt::Alignment placeholderAlignment() const; 返回placeholder的对齐方式
void setPlaceholderAlignment(Qt::Alignment flag); 设置placeholder的对齐方式
Qt::Alignment alignment() const; 返回输入文本的对齐方式
void setAlignment(Qt::Alignment flag) 设置输入文本的对齐方式。
void clear() 清空搜索框内容。
void setTranslucent(bool flag); 设置是否启用半透明效果自1.2.0.10启用)
bool isTranslucent(); 获取是否启用半透明效果自1.2.0.10启用)

4.1.4 按钮模块

4.1.4.1 带边框按钮

功能描述KBoderButton,继承自 QPushButton,样式上进行了封装。可以通过

setPalette()进一步调整样式。

如:

QPalette palette = m_pBtn1->palette();                 
palette.setColor(QPalette::ButtonText,QColor(255,0,0)); 
m_pBtn1->setPalette(palette);                          

QPushButton 中的各接口均适用,支持四种构造方法。

声明 描述
KBorderButton(QWidget* parent = nullptr); 仅一个button
KBorderButton(const QString &text, QWidget *parent = nullptr); 构造一个带文本button
KBorderButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr); 构造一个带文本和图标的button
KBorderButton(const QIcon &icon, QWidget *parent = nullptr); 构造一个带图标的button
void setIcon(const QIcon &icon); 设置按钮图标

4.1.4.2 无边框按钮

功能描述KboderlessButton,继承自 QPushButton,样式上进行了封装。同样

可以可以通过 setPalette()进一步调整样式。

输入图片说明

QPushButton 中的各接口均适用,支持四种构造方法。

声明 描述
KBorderlessButton(QWidget* parent = nullptr); 仅一个button
KBorderlessButton(const QString &text, QWidget *parent = nullptr); 构造一个带文本button
KBorderlessButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr); 构造一个带文本和图标的button
KBorderlessButton(const QIcon &icon, QWidget *parent = nullptr); 构造一个带图标的button
void setIcon(const QIcon &icon) 设置无边框按钮图标。

4.1.4.3 下拉菜单按钮

功能描述KMenuButton继承自 QPushButon默认 ICon 为"open-menu-symbolic",一级菜单中包含 5 个选项,分别是:"设置""主题""帮助""关于""退出",主题中包括 3 个二级选项,分别是:"跟随主题""浅色主题""深色主题"。

输入图片说明

QPushButton 的各个接口均适用。

声明 描述
QMenu* menu(); 获取主菜单
QMenu* themeMenu(); 获取主题菜单
QAction* settingAction(); 获取设置action
QAction* themeAction(); 获取主题Action
QAction* assistAction(); 获取帮助Action
QAction* aboutAction() 获取关于Action
QAction* quitAction(); 获取离开Action
QAction* autoAction(); 获取跟随主题Action
QAction* lightAction(); 获取浅色主题Action
QAction* darkAction(); 获取深色主题Action

4.1.4.4 开关按钮

功能描述KSwitchButton继承自 QPushButton对按钮进行了重绘用于指示开/关状态。

输入图片说明

输入图片说明

声明 描述
void setCheckable(bool); 设置是否可选中
bool isCheckable() const; 返回是否可选中
bool isChecked() const; 返回是否选中
void setChecked(bool); 设置是否选中
void setTranslucent(bool flag); 设置是否启用半透明效果自1.2.0.10启用)
bool isTranslucent() 获取是否启用半透明效果自1.2.0.10启用)

4.1.4.5 工具按钮

功能描述KToolButton继承自 QToolButton支持三种样式支持 loading状态支持是否显示下拉按钮。

输入图片说明

枚举类型

enum  KToolButtonType{Flat,SemiFlat,Background}
声明 描述
KToolButtonType type(); 返回类型
void setType(KToolButtonType type); 设置类型
void setIcon(const QIcon& icon); 设置Icon
void setLoading(bool flag); 设置正在加载状态,仅不带箭头的toolbuttuon支持该状态
bool isLoading(); 返回是否正在加载
QIcon icon(); 获取Icon
void setArrow(bool flag); 设置是否显示向下箭头,默认不显示
bool hasArrow() const; 返回是否显示箭头
void setPixmapSize(const QSize&size); 设置pixmap大小
QSize pixmapSize() const; 获取pixmap大小

4.1.4.6 KPushButton

功能描述KPushButton继承自 QPushButton在 QPushButton 的基础上新增提供半透明效果,可以设置按钮圆角、背景色、图标是否跟随系统高亮,还可以设置按钮类型,分为正常类型和圆形(需要设置大小实现正圆)。自 1.2.0.10 版本启用。

输入图片说明

枚举类型

enum  ButtonType { NormalType, CircleType };
声明 描述
void setBorderRadius(int radius); 通过圆角半径设置按钮圆角(每个圆角相同)
void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight); 通过四个点来设置圆角
int borderRadius(); 获取按钮圆角
void setBackgroundColor(QColor color); 设置按钮背景色
QColor backgroundColor(); 获取按钮背景色
void setButtonType(ButtonType type); 设置KPushButton的类型
ButtonType buttonType(); 获取KPushButton的类型
void setTranslucent(bool flag); 设置KPushButton是否为半透明
bool isTranslucent(); 判断KPushButton是否为半透明
void setIconHighlight(bool flag); 设置图标是否跟随系统高亮色,默认不跟随
bool isIconHighlight(); 判断图标是否跟随系统高亮色
void setIconColor(QColor color); 设置按钮添加图标的颜色自1.2.0.13启用)
QColor IconColor(); 获取按钮添加图标的颜色自1.2.0.13启用)
void setBackgroundColorHighlight(bool flag); 设置按钮背景色是否跟随系统高亮色默认不跟随自1.2.0.13启用)
bool isBackgroundColorHighlight(); 判断按钮背景色是否跟随系统高亮色自1.2.0.13启用)

4.1.4.7 KPressButton

功能描述KPressButton,继承自 QPushButton在 QPushButton 的基础上新增提供半透明效果,可以设置圆角,是否可选中,是否选中,还可以设置按钮的类型以及是否启用 loading 的状态。自 1.2.0.10 版本启用。

输入图片说明

枚举类型

enum  ButtonType { NormalType, CircleType };
声明 描述
void setBorderRadius(int radius); 通过圆角半径设置按钮圆角(每个圆角相同)
void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight); 通过四个点来设置圆角
void setCheckable(bool); 设置是否可选中
bool isCheckable() const; 返回是否可选中
void setChecked(bool); 设置是否选中
bool isChecked() const; 返回是否选中
void setButtonType(ButtonType type); 设置button类型
ButtonType buttonType(); 获取KPushButton的类型
void setTranslucent(bool flag); 设置KPushButton是否为半透明
bool isTranslucent(); 判断KPushButton是否为半透明
void setLoaingStatus(bool flag); 设置是否启用loading状态
bool isLoading(); 返回是否启用loading状态

4.1.5 Bar 模块

4.1.5.1 KIconBar

功能描述KWidget 和 KDialog 的一个组成部分,用于显示图标和窗口名称。

输入图片说明

声明 描述
void setIcon(const QString& iconName); 设置图标名称
void setIcon(const QIcon& icon); 设置图标
void setWidgetName(const QString& widgetName) 设置标题
QLabel* nameLabel(); 获取标题label
QLabel* iconLabel(); 获取图标label

4.1.5.2 KWindowButtonBar

功能描述KWidget 和 KDialog 的一个组成部分,用于下拉菜单、最小化、最大化、关闭按钮。

枚举类型

enum  MaximumButtonState{Maximum,Restore}

输入图片说明

声明 描述
QPushButton* minimumButton(); 获取最小化按钮
QPushButton* maximumButton(); 获取最大化按钮
QPushButton* closeButton(); 获取关闭按钮
KMenuButton* menuButton(); 获取菜单按钮
MaximumButtonState maximumButtonState(); 获取最大化按钮的状态(最大化/恢复)
void setMaximumButtonState(MaximumButtonState state); 设置最大化按钮图标状态(最大化/恢复)

4.1.5.3 进度条

功能描述KProgressBar继承自 QProgressBar支持三种状态正常、完成和失败支持是否显示进度值支持水平和竖直。

输入图片说明

枚举类型

enum  ProgressBarState{NormalProgress,FailedProgress,SuccessProgress}
声明 描述
ProgressBarState state(); 获取状态
void setState(ProgressBarState state); 设置状态
QString text() const override; 获取文本
void setOrientation(Qt::Orientation); 设置方向

4.1.5.4 KProgressCircle

环形进度条,支持三种状态:正常、完成和失败,支持是否显示进度值。

输入图片说明

声明 描述
int minimum() const 获取环形进度条的最小值。
int maximum() const 获取环形进度条的最大值。
int value() const 获取环形进度条的值。
QString text() const 获取环形进度条的文本。
void setTextVisible(bool visible) 设置环形进度条的文本是否可见。
bool isTextVisible() const 返回环形进度条的文本是否可见。
ProgressBarState state() 获取环形进度条的状态。
void setState(ProgressBarState state) 设置环形进度条的状态。

4.1.5.5 KTabBar

功能描述:继承自 QTabBar

输入图片说明

枚举类型

enum  KTabBarStyle{SegmentDark,SegmentLight,Sliding}
声明 描述
void setTabBarStyle(KTabBarStyle barStyle); 设置TabBar样式
KTabBarStyle barStyle(); 返回TabBar样式
void setBorderRadius(int radius); 设置圆角半径只对SegmentDarkSegmentLight样式生效
int borderRadius(); 获取圆角半径
void setBackgroundColor(const QColor &color) 设置KTabBar背景色。

4.1.5.6 导航栏

功能描述KNavigationBar支持显示三种样式的 item带图标的表示一级导航的 item不带图标的表示二级的导航 item还有表示组别的灰色字体的item。

声明 描述
void addItem(QStandardItem*item); 增加常规Item
void addSubItem(QStandardItem*subItem); 增加次级Item
void addGroupItems(QList<QStandardItem*>items,const QString& tag); 成组增加Item,在导航栏中会显示tag
void addTag(const QString& tag); 添加tag
QStandardItemModel* model(); 获取model
QListView* listview(); 获取listview

4.1.5.7 KPixmapContainer

功能描述:用于表示头像右上方消息提示信息,可以设置提示信息数值,字体大小,背景色,图片大小。

输入图片说明

声明 描述
int value() const; 获取值
void setValue(int value); 设置值
void setValueVisiable(bool flag); 设置值是否可见
bool isValueVisiable() const; 获取值是否可见
void setPixmap(const QPixmap& pixmap); 设置pixmap
QPixmap pixmap()const; 获取pixmap
void clearValue(); 清除值
QColor color(); 返回背景色
void setColor(const QColor& color); 设置背景色
int fontSize(); 返回字体大小
void setFontSize(int size); 设置字体大小

4.1.6 滑动条模块

4.1.6.1 滑动条

功能描述:

非步数关系:步数为 1可以在任意位置点击和拖拽

步数关系:步数为固定值,可根据步数值点击和拖拽;

节点关系:步数为节点间隔,可根据节点间隔点击和拖拽

输入图片说明

枚举类型

enum  KSliderType{SmoothSlider,StepSlider,NodeSlider,SingleSelectSlider}
声明 描述
void setTickInterval(int interval); 设置节点间隔
void setSliderType(KSliderType type); 设置滑动条类型
KSliderType sliderType(); 获取滑动条类型
int tickInterval() const;
void setValue(int); 设置值
void setNodeVisible(bool flag); 设置是否显示节点
bool nodeVisible(); 获取是否显示节点
void setToolTip(const QString&); 设置tooltip自1.2.0.7启用)
QString toolTip() const;
void setTranslucent(bool flag); 设置是否启用半透明效果自1.2.0.10启用)
bool isTranslucent(); 获取是否启用半透明效果自1.2.0.10启用)

4.1.7 消息提示模块

4.1.7.1 KBadge

功能描述:消息提醒气泡。可以设置提示信息数值,字体大小,背景色。

输入图片说明

声明 描述
int value(); 返回值
void setValue(int value); 设置值最大显示数值为999大于999显示"..."
void setValueVisiable(bool flag); 设置值是否可见
bool isValueVisiable() const; 获取值是否可见
QColor color(); 获取背景色
void setColor(const QColor& color); 设置背景色
int fontSize(); 获取字体大小
void setFontSize(int size); 设置字体大小

4.1.7.2 KBallonTip

功能描述:消息提示框,支持四种背景色以及对应的提示图标。

输入图片说明

枚举类型

enum  TipType{Nothing,Normal,Info,Warning,Error}
声明 描述
void showInfo(); 气泡在显示之后一定时间后自动消失
void setTipType(const TipType& type); 设置类型
TipType tipType(); 返回类型
void setText(const QString& text); 设置文本内容
QString text(); 返回文本内容
void setContentsMargins(int left, int top, int right, int bottom) 通过上下左右数值设置内容边距。
void setContentsMargins(const QMargins &margins); 通过QMargins对象设置内容边距。
void setTipTime(int my_time); 设置持续时间

4.1.7.3 KSecurityLevelBar

功能描述:密码强度提示条,用于指示密码强度等级。分为低,中,高三个等级,等级具体划分策略由应用程序指定。

输入图片说明

输入图片说明

输入图片说明

枚举类型

enum  SecurityLevel{Low,Medium,High}
声明 描述
void setSecurityLevel(SecurityLevel level); 设置安全等级
SecurityLevel securityLevel(); 获取安全等级

4.1.8 面包屑 KBreadCrumb

无边框的标签栏,可以添加文字和图标,支持点击和 hover 高亮。

功能图:

输入图片说明

枚举类型

enum  KBreadCrumbType { FlatBreadCrumb, CubeBreadCrumb }
声明 描述
void setIcon(const QIcon &icon); 设置图标
QIcon icon() const; 返回图标
bool isFlat() const; 返回KBreadCrumb是否为flat类型。
void setFlat(bool flat); 设置KBreadCrumb是否为flat类型。

4.1.9 KCommentPanel

enum  StarLevel {LevelZero =0, LevelOne, LevelTwo, LevelThree, LevelFour,LevelFive}

枚举类型

声明 描述
void setIcon(const QIcon&); 设置图标
void setTime(const QString&); 设置评论时间
void setName(const QString&); 设置评论名称
void setText(const QString&); 设置评论内容
void setGrade(StarLevel level); 设置评论等级

4.1.10 KListView

提供一个图片两行文字的显示效果,若只有一行文字,则对于 icon 居中显示 。

输入图片说明

4.1.11 KTag

标签,分为默认和可关闭的两种。

输入图片说明

输入图片说明

枚举类型

enum  TagStyle { HighlightTag, BoderTag, BaseBoderTag, GrayTag}
声明 描述
void setClosable(bool flag) 设置标签是否可以关闭。
bool closable() 返回标签是否可以关闭。
void setText(const QString &text) 设置标签的文本。
void setTagStyle(TagStyle style) 设置标签的样式。
TagStyle tagStyle() 获取标签的样式。
QString text() 获取标签的文本。

4.1.12 KTranslucentFloor

KTranslucentFloor继承自 QFrame提供一个毛玻璃底板可以设置圆角以及是否添加阴影效果。自 1.2.0.12 版本启用。

输入图片说明

声明 描述
void setBorderRadious(int radious); 设置圆角半径
int borderRadius(); 返回圆角半径
void setShadow(bool flag); 设置是否显示阴影
bool shadow(); 返回是否显示阴影
void setEnableBlur(bool flag); 设置是否启用毛玻璃效果自2.0.0.0启用)
bool enableBlur(); 获取是否已启用毛玻璃效果自2.0.0.0启用)
void setOpacity(qreal opacity); 设置透明度自2.0.0.0启用)
qreal opacity(); 获取透明度自2.0.0.0启用)

4.2 Wayland-helper

该模块主要负责提供在 X 平台和 Wayland 平台下均能生效的兼容接口,使应用无需考虑显示平台的差异。该模块安装方式如下:

sudo apt install libkysdk-waylandhelper libkysdk-waylandhelper-dev

根据不同项目类型,可参考以下 demo 构建项目:

1 .pro 文件构建项目:

qt 项目.pro 文件中增加:

CONFIG += link_pkgconfig         
PKGCONFIG += kysdk-waylandhelper 

2 CMakeLists.txt 构建项目

cmake_minimum_required(VERSION 3.5)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(KYSDKWAYLANDHELPER_PKG kysdk-waylandhelper)
target_include_directories(demo PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
target_link_directories(demo PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS})
target_link_libraries(demo Qt5::Widgets ${KYSDKWAYLANDHELPER_PKG_LIBRARIES})

4.2.1 WindowManager

声明 描述
static WindowManager* self(); 获取单例对象
static WindowInfo getwindowInfo(const WindowId& windowId); 获取窗口信息
static WindowId currentActiveWindow(); 获取当前活动窗口
static void keepWindowAbove(const WindowId& windowId); 置顶窗口
static QString getWindowTitle(const WindowId& windowId); 获取窗口标题
static QIcon getWindowIcon(const WindowId& windowId); 获取窗口图标
static QString getWindowGroup(const WindowId& windowId); 获取窗口所在组的组名
static void closeWindow(const WindowId& windowId); 关闭窗口
static void activateWindow(const WindowId& windowId); 激活窗口
static void maximizeWindow(const WindowId& windowId); 最大化窗口
static void minimizeWindow(const WindowId& windowId); 最小化窗口
static quint32 getPid(const WindowId& windowId); 获取窗口进程pid
static void showDesktop(); 显示当前桌面
static void hideDesktop(); 取消显示当前桌面
static QString currentDesktop(); 获取当前桌面的名称
static QList windows(); 获取当前窗口列表
static NET::WindowType getWindowType(const WindowId& windowId); 获取窗口类型仅适用于X环境下wayland下统一返回normal
static void setGeometry(QWindow *window,const QRect &rect);
static void setSkipTaskBar(QWindow *window,bool skip); 设置是否跳过任务栏自2.0.0.0启用)
static void setSkipSwitcher(QWindow *window,bool skip); 设置是否跳过窗口选择自2.0.0.0启用)
static bool skipTaskBar(const WindowId& windowId); 判断窗体是否跳过任务栏自2.0.0.0启用)
static bool skipSwitcher(const WindowId& windowId); 判断窗体是否跳过窗口选择自2.0.0.0启用)
static bool isShowingDesktop(); 判断桌面是否处于显示状态自2.0.0.0启用)
static void setOnAllDesktops(const WindowId &windowId); 设置窗口在所有桌面中显示自2.0.0.0启用)
static bool isOnAllDesktops(const WindowId &windowId); 判断窗口是否在所有桌面中显示自2.0.0.0启用)

4.2.2 WindowInfo

声明 描述
inline bool isMaximized() const; 返回窗口是否是最大化状态
inline bool isMinimized() const; 返回窗口是否是最小化状态
inline bool isMaximizable() const; 返回窗口是否可以最大化
inline bool isMinimizable() const; 返回窗口是否可以最小化
inline bool isKeepAbove() const; 返回窗口是否是置顶状态
inline bool hasSkipTaskbar() const; 返回窗口是否跳过任务栏
inline bool isFullscreen() const; 返回窗口是否是全屏状态
inline bool isOnAllDesktops() const noexcept; 返回窗口是否在所有桌面中显示
inline bool isValid() const; 判断窗口id是否有效
inline bool isActive() const noexcept; 返回窗口是否是激活状态

4.2.3 UkuiStyleHelper

声明 描述
static UkuiStyleHelper *self(); 获取单例对象
void removeHeader(QWidget* widget); 移除窗管标题栏

4.3 应用通用功能模块

4.3.1 日志模块

子模块 编程语言 声明 描述
日志模块 C++ static void logOutput(QtMsgType type , const QMessageLogContext &context , const QString &msg); 用于Qt注册日志函数不应单独调用.
参数说明 返回值说明
type:日志类型 context:调用打印日志接口文件信息 msg:日志信息

4.3.2 系统相关模块

子模块 编程语言 声明 描述
窗管模块 C++ static bool setWindowMotifHint(int winId); 添加窗管协议 .
参数说明 返回值说明
winId : 窗口 id 成功 : true
失败 : false
子模块 编程语言 声明 描述
窗管模块 C++ static bool setScalingProperties(void); 设置窗口缩放属性
参数说明 返回值说明
成功 : true
失败 : false
子模块 编程语言 声明 描述
session模块 C++ quint32 setInhibitLockScreen(AppName appName , QString reason); 禁止系统锁屏 .
参数说明 返回值说明
appName : 应用名 成功 : 非 0 的正整数
reason : 禁止锁屏的原因 失败 : 0
子模块 编程语言 声明 描述
session模块 C++ bool unInhibitLockScreen(quint32 flag) 取消禁止系统锁屏 .
参数说明 返回值说明
flag : 禁止锁屏标识 成功 : true
失败 : false

4.3.3 d-bus 模块------即将废弃

子模块 编程语言 声明 描述
d-bus模块 C++ static QList callMethod(QString serviceName, QString objectPath, QString interfaceName, QString methodName, QList args = QList()); 函数调用
参数说明 返回值说明
serviceName : 服务名 函数返回值
objectPath : 对象路径
interfaceName : 接口名
methodName : 函数名
args : 参数列表

4.3.4 系统信息模块

子模块 编程语言 声明 描述
系统信息模块 C++ QString getLsbReleaseInformation(QString key); 根据 lsb-release 文件的 key 值 获取信息
参数说明 返回值说明
key : 键值 获取到的信息 , 为空时可能确实为空也可能失败
子模块 编程语言 声明 描述
系统信息模块 C++ QString getOsReleaseInformation(QString key); 根据 os-release 文件的 key 值 获取信息
参数说明 返回值说明
key : 键值 获取到的信息 , 为空时可能确实为空也可能失败
子模块 编程语言 声明 描述
系统信息模块 C++ QString getProjectCodeName(void) 获取 PROJECT_CODENAME 字段的值
参数说明 返回值说明
空 : 失败
非空 : 获取到的值
子模块 编程语言 声明 描述
系统信息模块 C++ QString getCpuModelName(void) 获取 CPU 型号
参数说明 返回值说明
空 : 失败
非空 : 获取到的值
子模块 编程语言 声明 描述
系统信息模块 C++ QString getHdPlatform(void); 获取硬件平台信息
参数说明 返回值说明
空 : 失败
非空 : 获取到的值

5 基础开发 SDK

该层设计主要为应用开发提供与操作系统无关的、高通用性、基础性的功能集合。减少不同应用在实现相同功能式的差异性和复杂性。该层设计主要为应用开发提供与操作系统无关的、高通用性、基础性的功能集合。减少不同应用在实现相同功能式的差异性和复杂性。

安装命令:

$ sudo apt install libkysdk-base libkysdk-base-dev 

5.1 日志

C 语言日志模块提供了八个等级的日志记录接口,非 root 程序记录在~/.log

目录中root 程序记录在/var/log 下

$ sudo apt-get install libkysdk-log llibkysdk-log-dev 

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
add_library(kylog SHARED ${SOURCESCODE})
add_executable(kylog-testlog test/test-log.c)
add_executable(kylog-testsetdir test/test-setdir.c)
add_executable(kylog-testpressure test/test-pressure.c)
add_executable(kylog-testautowrap test/test-autowrap.c)
find_library(SYSTEMD_LIB systemd)
target_link_libraries(kylog kyconf pthread ${SYSTEMD_LIB})
target_link_libraries(kylog-testlog kylog)
target_link_libraries(kylog-testsetdir kylog)
target_link_libraries(kylog-testautowrap kylog)
target_link_libraries(kylog-testpressure kylog)

2调用日志模块需要添加头文件

#include "kysdk/kysdk-base/libkylog.h"

输出日志

类型 声明
输出debug级别日志 #define klog_debug(fmt , ...)
输出info级别日志 #define klog_info(fmt , ...)
输出notice级别日志 #define klog_notice(fmt , ...)
输出warning级别日志 #define klog_warning(fmt , ...)
输出error级别日志 #define klog_err(fmt , ...)
输出crit级别日志 #define klog_crit(fmt , ...)
输出alert级别日志 #define klog_alert(fmt , ...)
输出emerg级别日志 #define klog_emerg(fmt , ...)

初始化日志记录

子模块 编程语言 声明 描述
日志 C extern int kdk_logger_init(const char *ini)
参数说明 返回值说明
ini日志配置文件路径若传入NULL则会使用默认的日志配置文件 int0表示成功非0表示失败

缓存区日志写入

子模块 编程语言 声明 描述
日志 C extern void kdk_logger_flush() DESTRUCTOR;
参数说明 返回值说明

设置日志存储目录

子模块 编程语言 声明 描述
日志 C extern int kdk_logger_setdir(const char* dpath) 设置日志的存储目录若不设置非root程序会被记录在~/.log下root程序会被记录在/var/log下
参数说明 返回值说明
dpath日志存储路径 int 成功返回0失败返回-1

设置日志输出自动换行

子模块 编程语言 声明 描述
日志 C extern void kdk_logger_set_autowrap(int autowarp) 设置日志输出自动换行
参数说明 返回值说明
autowarp1表示启用启动换行0表示禁止自动换行

5.2 定时器

C 语言定时器模块,给 C/C++程序提供定时器功能接口。

$ sudo apt-get install libkysdk-timer libkysdk-timer-dev 

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
add_library(kytimer SHARED ${SOURCESCODE})
add_executable(test-kytimer test/test-kytimer.c)
target_link_libraries(kytimer pthread)
target_link_libraries(test-kytimer kytimer)

2调用定时器模块需要添加头文件

#include "kysdk/kysdk-base/libkytimer.h"

初始化定时器

子模块 编程语言 声明 描述
定时器 C int kdk_timer_init() 初始化定时器核心组件
参数说明 返回值说明
int0表示成功非0表示失败

启动定时器

子模块 编程语言 声明 描述
定时器 C size_t kdk_timer_start(unsigned int intervalms, time_handler callback, KTimerAttribute attr, KTimerType type, void* userdata, int freeOnDelete)
参数说明 返回值说明
intervalms定时器时间以毫秒为单位 size_t定时器的ID
callback定时器到期后触发的回调函数指针
attr定时器属性KTIMER_SINGLESHOT表示一次性定时器KTIMER_PERIODIC表示周期性定时器KTIMER_NEVER表示不会被触发的定时器
type定时器类型KTIMER_ABSOLUTE表示绝对时间定时器修改系统时间不会影响定时器的时间KTIMER_RELATIVE表示相对时间定时器修改系统时间会影响定时器时间
userdata指向用户数据的指针
freeOnDelete [未启用]

停止给定的定时器

子模块 编程语言 声明 描述
定时器 C void kdk_timer_stop(size_t timerfd) 停止给定的定时器
参数说明 返回值说明
timerfd由kdk_timer_start返回的定时器ID

销毁定时器

子模块 编程语言 声明 描述
定时器 C void kdk_timer_destroy() 销毁定时器
参数说明 返回值说明

重置定时器

子模块 编程语言 声明 描述
定时器 C void kdk_timer_reset(size_t timerfd , unsigned int intervalms) 重置定时器
参数说明 返回值说明
timerfd由kdk_timer_start返回的定时器ID
intervalms需要调整的时间间隔以ms为单位

5.3 C 语言字符串扩展

该模块封装了对字符串操作的 C 接口,包括字符串裁剪、分割、大小写转换、查找特定字符等操作。

$ sudo apt-get install libkysdk-utils libkysdk-utils-dev 

1调用 C 语言字符串扩展模块,需要添加头文件:

#include "kysdk/kysdk-base/cstring-extension.h"

分割字符串

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline char** strsplit(char *str, char delim) 对原字符串以给定的分隔符进行分割,注意该函数会修改原字符串
参数说明 返回值说明
str:需要分割的字符串 char** 分割后的字符串列表以NULL结尾。存储分割后所有字符串的字符串列表本身是由alloc申请的内存因此当使用完成后应当被free而分割出来的各个字符串不是申请的内存而是分别指向了原字符串中的特定位置因此他们不需要被分别free
delim:分隔符

小写字符串

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline void str2lower(char *str) 将字符串中的所有大写字母转化为小写字
参数说明 返回值说明
str:需要操作的字符串指针

大写字符串

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline void str2upper(char *str) 将字符串中的所有小写字母转化为大写字母
参数说明 返回值说明
str:需要操作的字符串指针

统计出现次数

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline size_t strcounts(const char *str, char ch) 统计给定字符在字符串中出现的次数
参数说明 返回值说明
str:原字符串 size_t:字符出现的次数
ch:需要统计的字符

后缀判断

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline int strendwith(const char *str, const char *postfix) 判断str是否以postfix结尾需要区分大小写
参数说明 返回值说明
str:原字符串 int 若str以postfix结尾则返回0否则返回1
postfix:需要匹配的字符串后缀

查找子字符串的首次出现位置

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline int strfirstof(const char* str, char ch) 在给定的字符串中查找给定字符第一次出现的位置计数从0开始
参数说明 返回值说明
str:原字符串 int 第一次出现的位置,若未找到给定的字符,则返回-1
ch:需要查找的字符

查找子字符串的末次出现位置

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline int strlastof(const char* str, char ch) 在给定的字符串中查找给定字符最后一次出现的位置计数从0开始
参数说明 返回值说明
str:原字符串 int 最后一次出现的位置,若未找到给定的字符,则返回-1
ch:需要查找的字符

删除空格和制表符

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline void strstripblank(char *str) 删除给定字符串前后的空格和水平制表符tab注意该操作会修改原字符串
参数说明 返回值说明
str:需要修改的字符串指针

跳过开始的所有空格、制表符、换行符

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline const char *strskipspace(const char *p) 跳过字符串前的所有空格、制表符、换行符;该操作不会修改原字符串
参数说明 返回值说明
p:指向原字符串的指针 const char* 指向跳过space后的字符串指针

前缀判断(区分大小写)

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline int strstartswith(const char *str, const char *prefix) 判断str是否以prefix开头该函数区分大小写
参数说明 返回值说明
str原字符串 int 若str以prefix开头则返回0否则返回1
prefix需要匹配的字符串前缀

前缀判断(不区分大小写)

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline int strstartswith_nocase(const char *str, const char *prefix) 判断str是否以prefix开头不区分大小写
参数说明 返回值说明
str:原字符串 int 若str以prefix开头则返回0否则返回1
prefix:需要匹配的字符串前缀

删减字符串前后的指定字符

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline void strstrip(char *str, char ch) 对给定的字符串进行strip操作删减字符串前后的指定字符注意该操作会修改原字符串
参数说明 返回值说明
str:需要进行strip的字符串指针
ch:需要删除的字符

跳过开始的所有空格、水平制表符

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline const char *strskipblank(const char *p) 跳过字符串前的所有空格和水平制表符tab该操作不会修改原字符串
参数说明 返回值说明
p指向原字符串的指针 const char* 指向跳过space后的字符串指针

删除前后的空格、制表符、换行符

子模块 编程语言 声明 描述
C语言字符串扩展 C static inline void strstripspace(char *str) 删除给定字符串前后的空格、制表符、换行符,注意该操作会修改原字符串
参数说明 返回值说明
str需要进行strip操作的字符串指针

5.4 链表模块

该模块实现了 C 语言链表操作相关接口。

$ sudo apt-get install libkysdk-utils libkysdk-utils-dev

1CMakeLists.txt 构建项目

aux_source_directory(linklist/skip_linklist SOURCESCODE)
add_library(kydatastruct SHARED ${SOURCESCODE})
add_subdirectory(linklist)
include_directories(linklist)
include_directories(linklist/skip_linklist)
add_executable(test-delete linklist/skip_linklist/test/delete_test.c)
add_executable(test-insert linklist/skip_linklist/test/insert_test.c)
add_executable(test-search linklist/skip_linklist/test/search_test.c)
target_link_libraries(test-delete kydatastruct)
target_link_libraries(test-insert kydatastruct)
target_link_libraries(test-search kydatastruct)

2调用定时器模块需要添加头文件

#include "kysdk/kysdk-base/skip_linklist.h"

创建跳表

子模块 编程语言 声明 描述
链表 C extern kysdk_skiplist* kysdk_create_skiplist() 创建跳表
参数说明 返回值说明
kysdk_skiplist* 跳表

销毁跳表

子模块 编程语言 声明 描述
链表 C extern void kysdk_destroy_skiplist(kysdk_skiplist *list) 销毁跳表并回收所有分配的内存注意data.ptr指向的内存若存在不会被释放
参数说明 返回值说明
list跳表

删除 key 值对应的节点

子模块 编程语言 声明 描述
链表 C extern int kysdk_skiplist_delete(kysdk_skiplist *list, int key) 删除key值对应的节点
参数说明 返回值说明
list需要操作的链表 int, 成功删除返回0失败返回-1
key

插入节点

子模块 编程语言 声明 描述
链表 C extern int kysdk_skiplist_insert(kysdk_skiplist *list, int key, kysdk_listdata data) 插入节点
参数说明 返回值说明
list需要操作的链表 int成功插入返回0失败返回-1
key
data数据

根据给定的 key 搜索 data 内容

子模块 编程语言 声明 描述
链表 C extern kysdk_listdata kysdk_skiplist_search(kysdk_skiplist *list, int key) 根据给定的key搜索data内容
参数说明 返回值说明
list需要操作的链表 kysdk_listdata当搜索的key不存在时data.num值为-1
key

设置跳表最高层数

子模块 编程语言 声明 描述
链表 C extern int kysdk_skiplist_setmaxlevels(kysdk_skiplist *list, unsigned int maxlevels) 设置跳表最高层数,该选项必须在跳表为空时使用
参数说明 返回值说明
list需要修改的跳表 int成功返回0失败返回-1
maxlevels层数

5.5 配置文件操作

KYSDK 配置文件处理库支持标准格式、XML(未实现)、JSON(未实现)的

配置文件处理,包括配置文件的读与写操作。

sudo apt-get install libkysdk-config libkysdk-config-dev

1CMakeLists.txt 构建项目

aux_source_directory(. SOURCESCODE)
add_library(kyconf SHARED ${SOURCESCODE})
add_executable(kyconf-test-struct test/test_structlist.c)
target_link_libraries(kyconf-test-struct kyconf kylog pthread)

2调用配置文件模块需要添加头文件

#include "kysdk/kysdk-base/libkyconf.h"

初始化配置文件

子模块 编程语言 声明 描述
配置文件操作 C extern int kdk_conf_init(const char* confpath) 初始化配置文件
参数说明 返回值说明
confpath配置文件的路径 int 成功返回句柄号(非负值),失败返回错误码(负值)

销毁指定的配置文件句柄

子模块 编程语言 声明 描述
配置文件操作 C extern void kdk_conf_destroy(int id) 销毁指定的配置文件句柄
参数说明 返回值说明
id由kdk_conf_init返回的配置文件句柄

重新载入配置文件

子模块 编程语言 声明 描述
配置文件操作 C extern int kdk_conf_reload(int id) 重新载入配置文件
参数说明 返回值说明
id由kdk_conf_init返回的配置文件句柄 int 成功返回0失败返回错误码

获取指定配置项的值

子模块 编程语言 声明 描述
配置文件操作 C extern const char* kdk_conf_get_value(int id, const char* group, const char* key) 获取指定配置项的值
参数说明 返回值说明
id由kdk_conf_init返回的配置文件句柄 const char* 配置项所拥有的值若key不存在则返回一个空字符串
groupkey所在的组名称
key配置项名称

枚举 key 值

子模块 编程语言 声明 描述
配置文件操作 C extern char** const kdk_conf_list_key(int id, const char* group) 列举id对应配置文件的指定Group下的key值结尾以NULL指针表示
参数说明 返回值说明
id由kdk_conf_init返回的句柄值 const char** const 以NULL结尾的字符串列表每个字符串都是一个key名称字符串列表本身是由alloc分配的内存需要被free释放字符串不需要释放
group需要列举的Group名称

枚举配置文件的 Group

子模块 编程语言 声明 描述
配置文件操作 C extern char** const kdk_conf_list_group(int id) 列举id对应配置文件的所有Group结尾以NULL指针表示
参数说明 返回值说明
id由kdk_conf_init返回的句柄值 const char** const 以NULL结尾的字符串列表每个字符串都是一个组名称字符串列表本身是由alloc分配的内存需要被free释放字符串不需要释放

5.6 单位进制转换

$ sudo apt-get install libkysdk-utils libkysdk-utils-dev 

1调用 C 语言字符串扩展模块,需要添加头文件:

#include "kysdk/kysdk-base/cstring-extension.h"

字符格式单位进制转换

子模块 编程语言 声明 描述
配置文件操作 C extern int kdkVolumeBaseCharacterConvert(const char* origin_data, KDKVolumeBaseType result_base, char* result_data); 字符格式单位进制转换
参数说明 返回值说明
入参: int类型值接口执行是否成功
origin_data:原始字符类型的数据以具体进制单位结束如果没有缺省为B 0-无异常
result_base:期望的结果进制单位 1-非法进制
出参: 2-非法参数
result_data:转化进制后的字符数据,带进制单位 3-非法数据格式
4-系统运行异常引发的未知错误

数字格式单位进制转换

子模块 编程语言 声明 描述
配置文件操作 C extern int kdkVolumeBaseNumericalConvert(double origin_numerical, KDKVolumeBaseType origin_base, KDKVolumeBaseType result_base, double* result_numerical); 数字格式单位进制转换
参数说明 返回值说明
入参: int类型值接口执行是否成功
origin_numerical原始数字类型数据 0-无异常
origin_base原始的进制单位 1-非法进制
出参: 2-非法参数
result_base期望的进制单位 3-非法数据格式
result_numerical期望进制下的数字类型数据 4-系统运行异常引发的未知错误