19197 . 插件支持多语言,支持多语言切换
20208 . 插件显示禁用支持统一配置。配置修改立即生效
2121## V25控制中心插件安装路径必要说明
22- 1 . V25控制中心插件安装路径为` ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0 `
22+ 1 . V25控制中心插件安装路径为` ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.1 `
23232 . 该路径下插件以单个文件夹形式存在,文件夹名为插件名,文件夹内为插件文件,假设插件名为example,则插件文件夹内容为:
2424``` bash
25- ${CMAKE_INSTALL_LIBDIR} /dde-control-center/plugins_v1.0 /example/
25+ ${CMAKE_INSTALL_LIBDIR} /dde-control-center/plugins_v1.1 /example/
2626├── qmldir
2727├── libexample_qml.so
2828└── example.so
@@ -43,13 +43,14 @@ ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0/example/
43435 . 将example.so导出的对象设置为dccData,加载ExampleMain.qml。此时,ExampleMain.qml中可以使用dccData.xxx()调用example.so导出的函数
44446 . 加载完成,将DccObject对象插入到模块树中
4545## V25控制中心插件开发必要说明
46- 1 . 控制中心有一个option,可以用来加载一个文件夹下的插件,比如一般插件会放置到` build ` 文件夹下,这时候可以` dde-control-center --spec ./lib/plugins_v1.0 ` 来加载单独一个插件进行调试。另外提醒,调试时候不要使用asan,因为没有使用asan的控制中心无法加载使用了asan编译的插件
46+ 1 . 控制中心有一个option,可以用来加载一个文件夹下的插件,比如一般插件会放置到` build ` 文件夹下,这时候可以` dde-control-center --spec ./lib/plugins_v1.1/ ` 来加载单独一个插件进行调试。另外提醒,调试时候不要使用asan,因为没有使用asan的控制中心无法加载使用了asan编译的插件
47472 . 控制中心插件加载是在线程中,但最终会将插件对象移到主线程。所以example.so构造函数中创建的对象需要在example.so导出类的树结构中(即子对象的父对象或祖先对象是example.so导出类),否则不会被移动到主线程,导致其中信号槽线程等不到,无法正常使用。
48483 . example.so导出类是唯一的,插件中不建议使用单例,可在example.so导出类中创建一个单例对象
4949## V25控制中心开发接口说明
5050控制中心导出的qml类有:
5151### 关键类
5252#### DccObject
53+ 控制中心的树形结构的数据节点,可表示界面的一个菜单项或功能项。
5354| 属性名称 | 说明 | 备注 |
5455| ---| ---| ---|
5556| name | 名称 | 作为唯一id使用,结合父项的name组成url,用于定位跳转、配置隐藏禁用等,由字符、数字组成,不建议有符号空格,不可有‘/’(url分隔符,会影响解析) |
@@ -64,6 +65,7 @@ ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0/example/
6465| visibleToApp | 可见 | 只读,包含配置与visible的结果,与控件显示关联 |
6566| enabledToApp | 启用 | 只读,包含配置与enabled的结果,与控件状态关联 |
6667| canSearch | 可搜索 | 默认true |
68+ | children | 子对象 | 只读,获取子控件列表 |
6769| backgroundType | 背景样式 | 默认AutoBg |
6870| pageType | 界面类型 | Menu、Editor、Item等,影响page显示方式,取值范围:0-255 |
6971| page | 界面控件 | |
@@ -73,7 +75,8 @@ ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0/example/
7375| ---| ---| ---|
7476| active | 激活 | backgroundType为Clickable时,点击控件出发,参数为空。DBus的ShowPage方法出发,如: ShowPage ("aa/bb?param=1"),则aa/bb项会收到active("param=1")信号 |
7577| deactive | 停用 | 页面退出时触发 |
76- #### DccApp 全局单例
78+ #### DccApp
79+ 全局单例,管理控制中心的整个模块树
7780| 函数 | 说明 | 备注 |
7881| ---| ---| ---|
7982| root | 根结点 | 属性 |
@@ -91,17 +94,72 @@ ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0/example/
9194| root | 根结点 | |
9295#### DccRepeater
9396使用提供的model实例化多个基于DccObject的对象,并添加到父项中,与Repeater类似
97+ | 属性 | 说明 | 备注 |
98+ | ---| ---| ---|
99+ | model | 数据源 | 对象的数据源,为QVariant类型,支持多种数据类型 |
100+ | delegate | 模板 | 用于生成对象的模板,为model中的每一项数据生成一个DccObject对象 |
101+ | count | model生成对象的数量 | 只读 |
102+
103+ | 信号 | 说明 | 备注 |
104+ | ---| ---| ---|
105+ | objAdded | 添加DccObject对象 | model实例化新对象时触发 |
106+ | objRemoved | 移除DccObject对象 | model移除对象时触发 |
107+
94108#### DccDBusInterface
95109与DBus交互的类,支持属性、信号、方法
110+ | 属性 | 说明 | 备注 |
111+ | ---| ---| ---|
112+ | service | 服务名 | D-Bus 服务的唯一标识符 |
113+ | path | 路径 | D-Bus 服务的对象路径 |
114+ | inter | 接口名 | D-Bus 服务的对象接口 |
115+ | connection | 总线类型 | SystemBus系统总线/SessionBus会话总线 |
116+ | suffix | 属性前缀 | 为动态属性添加前缀,避免与QML保留字冲突 |
117+
118+ | 函数 | 说明 | 备注 |
119+ | ---| ---| ---|
120+ | callWithCallback | 异步调用 D-Bus 方法,并通过JS回调处理结果 | |
121+
96122### 界面类
123+ #### DccLoader
124+ 用于加载DccObject的page控件的加载器,继承自Qt Quick的Loader。
125+ | 属性 | 说明 | 备注 |
126+ | ---| ---| ---|
127+ | dccObj | 要加载的DccObject | var |
128+ | dccObjItem | 控件父项 | Item |
97129#### DccGroupView
98- 一个组样式的控件
130+ 一个组样式的控件,根据子项DccObject的pageType进行渲染,并将所有子项放在一个组容器中。可通过 DccRepeater 批量创建子项。
131+ | 属性 | 说明 | 备注 |
132+ | ---| ---| ---|
133+ | isGroup | 是否显示组样式,默认为true | 值为true:子项无间距,显示分隔线;值为false:子项有间距,无分隔线 |
99134#### DccRightView
100- 控制中心右侧样式控件,Menu类型的DccObject未指定page时,会自动使用该控件
135+ 控制中心右侧样式控件,用于展示菜单项的子页面内容,支持滚动、拖动。Menu类型的DccObject未指定page时,page会自动使用该控件
136+ #### DccRowView
137+ 横向排列子项的行布局容器,通过DccLoader加载子项的page控件,将子项水平排列
101138#### DccSettingsView
102- 与DccRightView类似,但可以显示一个下方悬浮区域,需要其对应的DccObject有两个子项
139+ 与DccRightView类似,但可以显示一个下方悬浮区域。需要其对应的DccObject有两个子项,一个为主内容区域,未指定page时默认使用DccGroupView,一个为下方悬浮区域,未指定page时默认使用DccRowView
140+ #### DccSettingsObject
141+ 封装了DccSettingsView所需结构的DccObject模板,预创建了所需的两个子项
142+ | 属性 | 说明 | 备注 |
143+ | ---| ---| ---|
144+ | bodyUrl | 子项body的 URL | 用于向body中添加子项 |
145+ | footerUrl | 子项footer的 URL | 用于向footer中添加子项 |
103146#### DccItemBackground
104147处理控件背景的控件,在DccRightView中用到
148+ #### DccCheckIcon
149+ 显示勾选图标的控件,用于显示和切换选中状态
150+ #### DccLabel
151+ 支持自动省略和悬浮提示的Label
152+ #### DccTitleObject
153+ 包含标题和描述的分组标题控件
154+ #### SearchBar
155+ 搜索框控件,支持搜索、搜索结果弹窗显示和键盘导航
156+ #### DccTimeRange
157+ 选择或编辑时间范围的控件,显示格式为"时:分"
158+ | 属性 | 说明 | 备注 |
159+ | ---| ---| ---|
160+ | hour | 时 | |
161+ | minute | 分 | |
162+
105163## 代码示例:
106164### 代码文件夹结构
107165假设插件名为example,代码文件夹内容为:
@@ -211,6 +269,10 @@ public Q_SLOTS:
211269Q_SIGNALS:
212270 void nameChanged(const QString &name);
213271 void calcTypeChanged(int calcType);
272+
273+ private:
274+ QString m_name;
275+ int m_calcType;
214276};
215277```
216278### pluginexample.cpp
0 commit comments