DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DACommonPropertySettingDialog类 参考

通用的属性设置对话框,支持通过 JSON 配置动态生成设置界面 更多...

#include <DACommonPropertySettingDialog.h>

类 DA::DACommonPropertySettingDialog 继承关系图:

class  PrivateData
 

信号

void propertyValueChanged (const QString &propertyName, const QVariant &value)
 属性值变更信号
 

Public 成员函数

 DACommonPropertySettingDialog (QWidget *parent=nullptr)
 
bool loadFromJson (const QString &jsonStr)
 从 JSON 字符串加载配置
 
bool loadFromJsonObject (const QJsonObject &jsonObj)
 从 QJsonObject 加载配置
 
QJsonObject getCurrentValues () const
 获取所有属性的当前值
 
QVariant getValue (const QString &propertyName) const
 获取特定属性的当前值
 
bool setValue (const QString &propertyName, const QVariant &value)
 设置特定属性的值
 
void resetToDefaults ()
 重置所有属性为默认值
 

静态 Public 成员函数

static QJsonObject showSettingsDialog (const QString &jsonConfig, QWidget *parent=nullptr)
 静态方法:显示设置对话框并获取结果
 

Protected 成员函数

void changeEvent (QEvent *e) override
 处理界面语言变更事件
 

详细描述

通用的属性设置对话框,支持通过 JSON 配置动态生成设置界面

该类使用 QtPropertyBrowser 框架,通过 JSON 配置动态生成属性编辑界面。 支持从 Python 端生成 JSON 配置,C++ 端解析并显示设置窗口。

JSON 配置格式说明

JSON 配置是一个对象,包含以下主要字段:

1. 基本结构

{
"window_title": "窗口标题",
"properties": [
// 属性定义数组
]
}

2. 属性类型说明

2.1 分组属性 (group)

用于将相关属性组织在一起。

{
"name": "basic_settings",
"type": "group",
"display_name": "基本设置",
"properties": [
// 子属性定义
]
}

2.2 字符串属性 (string)

{
"name": "str_param",
"type": "string",
"display_name": "字符串参数",
"value": "默认值",
"description": "参数说明",
"read_only": false
}

2.3 整数属性 (int)

{
"name": "int_param",
"type": "int",
"display_name": "整数参数",
"value": 100,
"min": 0,
"max": 1000,
"description": "整数参数说明",
"singleStep": 10
}

2.4 浮点数属性 (double)

{
"name": "float_param",
"type": "double",
"display_name": "浮点参数",
"value": 0.5,
"min": 0.0,
"max": 1.0,
"decimals": 3,
"description": "浮点参数说明",
"singleStep": 0.1
}

2.5 布尔属性 (bool)

{
"name": "bool_param",
"type": "bool",
"display_name": "布尔参数",
"value": true,
"description": "布尔参数说明"
}

2.6 枚举属性 (enum)

支持两种配置方式:

方式一:简写方式(兼容旧版本)

{
"name": "algorithm",
"type": "enum",
"display_name": "算法选择",
"value": "svm",
"enum_items": ["svm", "random_forest", "neural_network"],
"description": "选择算法类型"
}

方式二:带描述的方式(推荐)

{
"name": "algorithm",
"type": "enum",
"display_name": "算法选择",
"value": "svm",
"enum_items": ["svm", "random_forest", "neural_network"],
"enum_descriptions": ["支持向量机", "随机森林", "神经网络"],
"description": "选择算法类型"
}

如果没有提供 enum_descriptions,则显示 enum_items 的值。 获取值时始终返回 enum_items 中的值。

2.7 颜色属性 (color)

{
"name": "text_color",
"type": "color",
"display_name": "文本颜色",
"value": "#FF0000",
"description": "选择文本颜色"
}

2.8 字体属性 (font)

{
"name": "text_font",
"type": "font",
"display_name": "文本字体",
"value": "Arial,12,-1,5,50,0,0,0,0,0",
"description": "选择文本字体"
}

2.9 文件选择属性 (file)

{
"name": "input_file",
"type": "file",
"display_name": "输入文件",
"value": "",
"filter": "文本文件 (*.txt);;所有文件 (*.*)",
"description": "选择输入文件"
}

2.10 文件夹选择属性 (folder)

{
"name": "output_dir",
"type": "folder",
"display_name": "输出目录",
"value": "",
"description": "选择输出目录"
}

2.11 字符串列表属性 (stringlist)

{
"name": "string_list",
"type": "stringlist",
"display_name": "字符串列表",
"value": ["item1", "item2", "item3"],
"description": "字符串列表参数"
}

使用示例

C++ 端示例

#include "DACommonPropertySettingDialog.h"
// 1. 直接使用对话框
if (dialog.loadFromJson(jsonString)) {
if (dialog.exec() == QDialog::Accepted) {
QJsonObject result = dialog.getCurrentValues();
// 处理结果
}
}
// 2. 使用静态方法
jsonString, parentWidget);
if (!result.isEmpty()) {
// 处理结果
}
通用的属性设置对话框,支持通过 JSON 配置动态生成设置界面
Definition DACommonPropertySettingDialog.h:258
static QJsonObject showSettingsDialog(const QString &jsonConfig, QWidget *parent=nullptr)
静态方法:显示设置对话框并获取结果
Definition DACommonPropertySettingDialog.cpp:759
bool loadFromJson(const QString &jsonStr)
从 JSON 字符串加载配置
Definition DACommonPropertySettingDialog.cpp:506
QJsonObject getCurrentValues() const
获取所有属性的当前值
Definition DACommonPropertySettingDialog.cpp:579

Python 端示例

import json
# 生成配置
config = {
"window_title": "参数设置",
"properties": [
{
"name": "basic",
"type": "group",
"display_name": "基本设置",
"properties": [
{
"name": "threshold",
"type": "double",
"display_name": "阈值",
"value": 0.5,
"min": 0.0,
"max": 1.0,
"decimals": 2,
"description": "处理阈值"
},
{
"name": "enable_filter",
"type": "bool",
"display_name": "启用过滤",
"value": True,
"description": "是否启用过滤器"
}
]
}
]
}
# 转换为 JSON 字符串传递给 C++
json_string = json.dumps(config, ensure_ascii=False)
注解
确保在创建对话框前已经初始化了 QApplication
参见
QtPropertyBrowser, QtVariantPropertyManager

成员函数说明

◆ changeEvent()

void DA::DACommonPropertySettingDialog::changeEvent ( QEvent *  e)
overrideprotected

处理界面语言变更事件

参数
e事件对象
注解
当应用程序语言变更时,会自动重新翻译界面

◆ getCurrentValues()

QJsonObject DA::DACommonPropertySettingDialog::getCurrentValues ( ) const

获取所有属性的当前值

返回
包含所有属性名称和值的 JSON 对象
注解
枚举类型返回字符串值,颜色返回十六进制字符串,字体返回字体字符串
参见
getValue()
QJsonObject values = dialog.getCurrentValues();
QString jsonStr = QJsonDocument(values).toJson();
// 可以传递给 Python 端

◆ getValue()

QVariant DA::DACommonPropertySettingDialog::getValue ( const QString &  propertyName) const

获取特定属性的当前值

参数
propertyName属性名称(JSON 配置中的 name 字段)
返回
属性的 QVariant 值,如果属性不存在返回无效的 QVariant
参见
getCurrentValues()
QVariant value = dialog.getValue("threshold");
if (value.isValid()) {
double threshold = value.toDouble();
}

◆ loadFromJson()

bool DA::DACommonPropertySettingDialog::loadFromJson ( const QString &  jsonStr)

从 JSON 字符串加载配置

参数
jsonStrJSON 格式的配置字符串
返回
如果加载成功返回 true,否则返回 false
注解
如果 JSON 格式错误或解析失败,会输出警告信息并返回 false
参见
loadFromJsonObject()
QString json = R"({
"window_title": "测试",
"properties": [{
"name": "param1",
"type": "string",
"value": "test"
}]
})";
dialog.loadFromJson(json);

◆ loadFromJsonObject()

bool DA::DACommonPropertySettingDialog::loadFromJsonObject ( const QJsonObject &  jsonObj)

从 QJsonObject 加载配置

参数
jsonObjJSON 配置对象
返回
如果加载成功返回 true,否则返回 false
注解
此方法会清空现有的所有属性并重新创建
参见
loadFromJson()

◆ propertyValueChanged

void DA::DACommonPropertySettingDialog::propertyValueChanged ( const QString &  propertyName,
const QVariant &  value 
)
signal

属性值变更信号

参数
propertyName属性名称
value新的属性值
注解
当用户修改属性值时发出此信号
this, [](const QString& name, const QVariant& value) {
qDebug() << "属性" << name << "变为:" << value;
});
void propertyValueChanged(const QString &propertyName, const QVariant &value)
属性值变更信号

◆ resetToDefaults()

void DA::DACommonPropertySettingDialog::resetToDefaults ( )

重置所有属性为默认值

注解
默认值来自 JSON 配置中的 value 字段

◆ setValue()

bool DA::DACommonPropertySettingDialog::setValue ( const QString &  propertyName,
const QVariant &  value 
)

设置特定属性的值

参数
propertyName属性名称
value要设置的值
返回
如果设置成功返回 true,否则返回 false
注解
可以在对话框显示前预置某些属性的值

◆ showSettingsDialog()

QJsonObject DA::DACommonPropertySettingDialog::showSettingsDialog ( const QString &  jsonConfig,
QWidget *  parent = nullptr 
)
static

静态方法:显示设置对话框并获取结果

参数
jsonConfigJSON 配置字符串
parent父窗口指针,默认为 nullptr
defaultTitle默认窗口标题,如果 JSON 中没有指定则使用此标题
返回
包含用户设置结果的 JSON 对象,如果用户取消则为空对象
注解
这是一个方便的静态方法,适合简单场景使用
jsonConfig, this, "参数设置");
if (!result.isEmpty()) {
// 用户点击了确定
}

该类的文档由以下文件生成: