Visindigo::Widgets::ConfigWidget Class
class Visindigo::Widgets::ConfigWidget此类从CWJson创建配置窗口. 详情...
| 头文件: | #include <ConfigWidget> |
| 自以下版本: | Visindigo 0.13.0 |
公开成员函数
(自 Visindigo 0.13.0 引入) | ConfigWidget(QWidget *parent = nullptr) |
(自 Visindigo 0.13.0 引入) virtual | ~ConfigWidget() |
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig * | getConfig() |
(自 Visindigo 0.13.0 引入) bool | isIndependentMode() const |
(自 Visindigo 0.14.0 引入) bool | isSaveNeedRestart() const |
(自 Visindigo 0.13.0 引入) void | loadCWJson(const QString &json) |
(自 Visindigo 0.13.0 引入) void | resetConfig() |
(自 Visindigo 0.13.0 引入) void | saveConfig() |
(自 Visindigo 0.13.0 引入) void | setComboBoxIndex(const QString &node, int index) |
(自 Visindigo 0.14.0 引入) void | setIndependentMode(bool independent, bool saveNeedRestart = false) |
(自 Visindigo 0.13.0 引入) void | setLineEditText(const QString &node, const QString &text) |
(自 Visindigo 0.13.0 引入) void | setRadioButtonChecked(const QString &node, bool checked) |
(自 Visindigo 0.13.0 引入) void | setTargetConfig(const QString &path, const QString &node = "", const QString &fileType = "json") |
(自 Visindigo 0.13.0 引入) void | syncConfig() |
信号
(自 Visindigo 0.13.0 引入) void | colorChanged(const QString &node, const QColor &clr) |
(自 Visindigo 0.13.0 引入) void | comboBoxIndexChanged(const QString &node, int index, QString data) |
(自 Visindigo 0.13.0 引入) void | lineEditTextChanged(const QString &node, const QString &text) |
(自 Visindigo 0.13.0 引入) void | radioButtonChanged(const QString &node, bool checked) |
(自 Visindigo 0.13.0 引入) void | reseted() |
(自 Visindigo 0.13.0 引入) void | saved() |
(自 Visindigo 0.13.0 引入) void | textEditTextChanged(const QString &node, const QString &text) |
详细说明
此类提供一种便捷的配置文件操作窗口创建方式,使用一种被约定为“CWJSON”的Json格式来描述配置窗口的内容。并且 允许窗口和一个配置文件相绑定,将结果同步到配置文件中。
CWJson的顶层格式如下:
{
"target": "$(ProgramPath)/resource/test_config.json",
"targetType": "json",
“targetNode": "someConfig.node",
"widget":[]
}
其中,target为目标配置文件的路径,targetType为目标配置文件的类型,widget为窗口的内容。 target键不存在的时候,则不和任何特定文件绑定,只在内存中保存配置数据。调用 saveConfig()不产生任何效果,可以自行调用getConfig()将其另行处理。
当targetNode被设置的时候,则只读取target中targetNode节点的数据进行初始化,并且只将targetNode节点的数据进行保存,其他节点的数据不受影响。
这对于一份文件存储多个不同模块的配置时非常有用,可以让不同模块的配置窗口只关心自己对应的节点,而不需要担心其他节点的数据被覆盖。
在有targetNode设置的情况下,存储数据时会先读取整个文件的数据,更新targetNode节点的数据后再写回文件, 这个操作在单线程情况下是安全的(无论有多少个ConfigWidget准备写入这个Config文件),但 多线程时可能会出现竞争条件,导致数据丢失或损坏,因此在多线程环境下使用时需要注意。
Note: 当前,targetType仅支持json格式,目前有支持YAML的计划,但具体实现时间未定。
对于widget来说,其基本格式如下,我们以一个ComboBox类型的配置为例:
{
"node": "Theme",
"type": "ComboBox",
"icon": "",
"title": "i18n:YSS::config.theme.title",
"text": "i18n:YSS::config.theme.text",
“readOnly": false,
"data": {
"comboBox": [
{
"data": "theme_dark",
"key": "i18n:YSS::config.theme.dark"
},
{
"data": "theme_light",
"key": "i18n:YSS::config.theme.light"
}
],
"default": "theme_dark"
},
"children": []
}
其中,node是要绑定到的配置项节点,子一级节点会自动继承父一级节点的名称。 type是要创建的控件类型,icon是控件的图标,title是控件的标题,text是控件的描述。 data是控件的具体数据,children是控件的子控件。
对于type,当前支持的类型为ComboBox、RadioButton、Frame和LineEdit。其中Frame是 专门用来作为容器的控件,没有输入功能。因此Frame没有data项目。
Note: 实际上,内部逻辑是,只有检测到data项目时,再根据不同的type来初始化数据控件。因此当type不为 Frame且漏写data时,其效果如同使用Frame,即没有输入功能,仅作为容器使用。
title和text支持YSS翻译系统,当其以“i18n:”开头时,会自动进行翻译,具体参见 Visindigo::General::TranslationHost
不同的控件类型有不同的data格式,ComboBox的格式已经在上面给出,RadioButton的格式如下:
"data": {
"default": true
}
即只提供默认是否选中即可。而LineEdit的格式如下:
"data": {
"default": "test"
"check": {
"min": 1,
"max": 10,
"regex": "^[a-zA-Z0-9]+$"
}
}
其中,check为检查项,min和max为最小和最大长度,regex为正则表达式。
Note: 目前,LineEdit的检查项仅支持最小和最大长度,正则表达式的检查项未实现。
成员函数文档
[since Visindigo 0.13.0] ConfigWidget::ConfigWidget(QWidget *parent = nullptr)
parent 父窗口 类的构造函数
这个function 从 Visindigo 0.13.0 开始支持。
[virtual noexcept, since Visindigo 0.13.0] ConfigWidget::~ConfigWidget()
析构函数
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::colorChanged(const QString &node, const QColor &clr)
node 配置项节点 clr 当前颜色 当某个ColorDialog的颜色发生改变时发出此信号,node参数为该ColorDialog绑定的配置项节点,clr参数为当前的颜色。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::comboBoxIndexChanged(const QString &node, int index, QString data)
node 配置项节点 index 当前选中项的索引 data 当前选中项的数据 当某个ComboBox的选中项发生改变时发出此信号,node参数为该ComboBox绑定的配置项节点,index参数为当前选中项的索引,data参数为当前选中项的数据。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] Visindigo::Utility::JsonConfig *ConfigWidget::getConfig()
return 当下的配置数据,返回一个JsonConfig对象的指针,可以直接对其进行读写操作来获取或修改配置数据。 return 的JsonConfig指针在此类的生命周期内始终有效,直到此类被销毁为止。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] bool ConfigWidget::isIndependentMode() const
return 独立模式状态。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.14.0] bool ConfigWidget::isSaveNeedRestart() const
return 保存后是否需要重启的提示状态。
这个function 从 Visindigo 0.14.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::lineEditTextChanged(const QString &node, const QString &text)
node 配置项节点 text 当前文本内容 当某个LineEdit的文本内容发生改变时发出此信号,node参数为该LineEdit绑定的配置项节点,text参数为当前的文本内容。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::loadCWJson(const QString &json)
json 为CWJson的内容 加载CWJson
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::radioButtonChanged(const QString &node, bool checked)
node 配置项节点 checked 当前选中状态 当某个RadioButton的选中状态发生改变时发出此信号,node参数为该RadioButton绑定的配置项节点,checked参数为当前的选中状态。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::resetConfig()
重置配置数据为默认值,默认值在CWJson中进行设置。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::reseted()
已重置的信号,这个信号只有在独立模式下,单击重置按钮并 完成重置操作后才会发出。直接调用resetConfig()函数不会发出此信号。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::saveConfig()
将当前配置数据保存到目标配置文件中。
如果目标文件路径未设置,则此函数不执行任何操作。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::saved()
已保存的信号,这个信号只有在独立模式下,单击保存按钮并 完成保存操作后才会发出。直接调用saveConfig()函数不会发出此信号。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::setComboBoxIndex(const QString &node, int index)
node 配置项节点 index 要设置的选中项索引 手动设置某个ComboBox的选中项。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.14.0] void ConfigWidget::setIndependentMode(bool independent, bool saveNeedRestart = false)
independent 设置独立模式。独立模式下将显示重置和保存按钮,非独立模式下隐藏重置和保存按钮。 saveNeedRestart 设置保存后是否需要重启生效的提示,目前仅在独立模式下生效。 请注意,需要重启的提示也仅作提示,不会强制要求用户重启。
如果ConfigWidget不是独立模式,从外部接管配置文件的读取和保存,那么独立模式和保存后需要 重启的提示都无效。
这个function 从 Visindigo 0.14.0 开始支持。
另请参阅 isIndependentMode().
[since Visindigo 0.13.0] void ConfigWidget::setLineEditText(const QString &node, const QString &text)
node 配置项节点 text 要设置的文本内容 手动设置某个LineEdit的文本内容。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::setRadioButtonChecked(const QString &node, bool checked)
node 配置项节点 checked 要设置的选中状态 手动设置某个RadioButton的选中状态。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::setTargetConfig(const QString &path, const QString &node = "", const QString &fileType = "json")
手动设置目标配置文件路径和节点信息。 path 目标配置文件路径,可以使用VIPlaceholder中的占位符。 node 目标配置节点,如果不为空,则只读取和保存该节点的数据 fileType 目标配置文件类型,目前仅支持json,可以不填或填入"json"。
注意CWJson是只读的且只读一次,除非重新调用loadCWJson,否则 调用此函数后CWJson中关于target和targetNode的设置将不再生效,但也不会被改写。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void ConfigWidget::syncConfig()
将当前配置数据同步到窗口中,更新窗口的显示状态。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void ConfigWidget::textEditTextChanged(const QString &node, const QString &text)
node 配置项节点 text 当前文本内容 当某个TextEdit的文本内容发生改变时发出此信号,node参数为该TextEdit绑定的配置项节点,text参数为当前的文本内容。
这个function 从 Visindigo 0.13.0 开始支持。