Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

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,当前支持的类型为ComboBoxRadioButton、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 开始支持。