215 KiB
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
(1)dbus 服务名称:com.kylin.kysdk.TimeServer
(2)路径名称:/com/kylin/kysdk/Timer
(3)Interfaces:com.kylin.kysdk.TimeInterface
(4)信号:
系统时间修改信号:TimeChangeSignal
定时报时信号:TimeSignal
系统时间修改报时
子模块 | 编程语言 | 声明 | 描述 | |
系统时间报时 | C | Void TimeChangeSignal(const char* t) | 当系统时间被修改时,com.kylin.kysdk.TimeServerDbus服务会发出报时信号 | |
参数说明 | 返回值说明 | |||
t:当前时间 如: "2021/09/26 21:13:28" | 无 |
系统时间整分报时
子模块 | 编程语言 | 声明 | 描述 | |
系统时间报时 | C | void 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 信息
(1)CMakeLists.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信息 | C | extern 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 接口获取到网卡硬件信息。
(1)CMakeLists.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返回1,Down返回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 : 无线 |
获取指定网卡的厂商名称和设备型号
子模块 | 编程语言 | 声明 | 描述 | |
获取网卡信息 | C | extern 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 接口获取到网卡硬件信息。
(1)CMakeLists.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 硬件信息。
(1)CMakeLists.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 接口获取到主板硬件信息。
(1)CMakeLists.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 设备硬件信息。
(1)CMakeLists.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
(1)CMakeLists.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 |
检测指定包名的软件包是否正确安装
子模块 | 编程语言 | 声明 | 描述 | |
获取包列表信息 | C | extern 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
(1)CMakeLists.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 |
获取指定进程的属主
子模块 | 编程语言 | 声明 | 描述 | |
获取资源信息 | C | extern char* kdk_get_process_user(int proc_num) | 获取指定进程的属主 | |
参数说明 | 返回值说明 | |||
proc_num:进程号 | char* 属主 |
获取指定进程的CPU使用率
子模块 | 编程语言 | 声明 | 描述 | |
获取资源信息 | C | extern float kdk_procname_get_process_cpu_usage_percent(char *proc_name) | 获取指定进程的CPU使用率 | |
参数说明 | 返回值说明 | |||
proc_name 进程名 | float CPU使用率 |
获取指定进程的信息
子模块 | 编程语言 | 声明 | 描述 | |
获取资源信息 | C | extern char** kdk_procname_get_process_infomation(char *proc_name) | 获取指定进程的信息 | |
参数说明 | 返回值说明 | |||
proc_name 进程名 | char** 进程的信息列表,以NULL表示结尾,由alloc生成,需要被kdk_proc_freeall回收;若获取出错,返回NULL; |
获取进程所有信息
子模块 | 编程语言 | 声明 | 描述 | |
获取资源信息 | C | char** kdk_get_process_all_information() | 获取进程所有信息 | |
参数说明 | 返回值说明 | |||
无 | char** 进程所有信息列表,,以NULL表示结尾,由alloc生成,需要被kdk_proc_freeall回收;若获取出错,返回NULL; |
回收字符串列表
子模块 | 编程语言 | 声明 | 描述 | |
获取资源信息 | C | extern inline void kdk_proc_freeall(char **ptr) | 回收字符串列表 | |
参数说明 | 返回值说明 | |||
ptr:字符串列表 | 无 |
3.1.5 获取操作系统基础信息
封装 C 接口获取系统名称、版本号、激活信息等。
$ sudo apt-get install libkysdk-sysinfo libkysdk-sysinfo-dev
(1)CMakeLists.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) | 获取系统版本号 |
参数说明 | 返回值说明 | ||
verbose:0获取简略版本号,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 网络连接状态 | ||
获取网络端口状态
子模块 | 编程语言 | 声明 | 描述 | |
获取系统基础信息 | C | extern int kdk_net_get_port_stat(int port); | 获取端口状态 | |
参数说明 | 返回值说明 | |||
port 端口号 | int 端口状态FREE:0TCP_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 |
获取多个网络端口状态
子模块 | 编程语言 | 声明 | 描述 | |
获取系统基础信息 | C | int kdk_net_get_multiple_port_stat(int start, int end, int *result) | 获取[start,end]的端口状态 | |
参数说明 | 返回值说明 | |||
start 开始端口号end 结束端口号result 具有足够空间的int数组。接受端口状态 | 成功返回0失败返回 端口状态 |
获取默认网关
子模块 | 编程语言 | 声明 | 描述 | |
获取系统基础信息 | C | extern prouteMapList kdk_net_get_route(); | 获取默认网关 | |
参数说明 | 返回值说明 | |||
无 | prouteMapList 网管信息,具体信息自取,失败返回NULL |
获取防火墙状态
子模块 | 编程语言 | 声明 | 描述 | |
获取系统基础信息 | C | extern pChain kdk_net_get_iptable_rules() | 获取防火墙信息 | |
参数说明 | 返回值说明 | |||
无 | pChain 防火墙信息,具体信息自取,失败返回NULL |
3.1.7 获取系统运行时信息
封装 C++类获取网速、cpu 温度、硬盘温度等。
$ sudo apt-get install libkyrealtimeinfo libkyrealtimeinfo-dev
(1)CMakeLists.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
(1)CMakeLists.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_layout:cups属性,如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-qtwidgets,wayland 显示协议兼容接口 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
(2)CMakeLists.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 默认高度为 40px,sideBar 默认宽度为 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); | 设置圆角半径,只对SegmentDark,SegmentLight样式生效 |
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
(1)CMakeLists.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则会使用默认的日志配置文件 | int,0表示成功,非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) | 设置日志输出自动换行 |
参数说明 | 返回值说明 | ||
autowarp:1表示启用启动换行,0表示禁止自动换行 | 无 |
5.2 定时器
C 语言定时器模块,给 C/C++程序提供定时器功能接口。
$ sudo apt-get install libkysdk-timer libkysdk-timer-dev
(1)CMakeLists.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() | 初始化定时器核心组件 |
参数说明 | 返回值说明 | ||
无 | int,0表示成功,非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
(1)CMakeLists.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
(1)CMakeLists.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不存在,则返回一个空字符串 | ||
group:key所在的组名称 | |||
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-系统运行异常引发的未知错误 |