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

Visindigo::Widgets::QuickMenu Class

class Visindigo::Widgets::QuickMenu

QuickMenu提供了一种从JSON快速创建菜单的方式. 详情...

头文件: #include <QuickMenu>
自以下版本: Visindigo 0.13.0

公开成员函数

(自 Visindigo 0.13.0 引入) QuickMenu(QWidget *parent = nullptr)
(自 Visindigo 0.13.0 引入) ~QuickMenu()
(自 Visindigo 0.13.0 引入) void loadFromJson(const QString &jsonStr)
(自 Visindigo 0.13.0 引入) void setActionHandler(QObject *handler)

详细说明

QuickMenu提供了一种从JSON快速创建菜单的方式。 通过调用loadFromJson函数,传入符合规范的JSON字符串,即可动态生成菜单结构, 并将菜单项的触发事件连接到指定的槽函数。QuickMenu适用于需要根据配置文件或运行时数据动态构建菜单的场景, 极大地简化了菜单创建和管理的复杂性。

JSON规范

可以被解析的Json需遵循如下格式:

{
        "menu": [
                {
                        "ID": "__MenuID__",
                        "Name": "__i18n_MenuName__",
                        "Actions": [
                                {
                                        "ID": "__ActionGroupID__",
                                        "Actions":[
                                                {
                                                        "ID": "__ActionID__",
                                                        "Name": "__i18n_ActionName__",
                                                }
                                        ]
                                }
                        ]
                }
        ]
}

也就是说,JSON的根对象必须包含一个名为"menu"的数组,每个元素代表一个菜单。每个菜单对象必须包含"ID"和"Name"属性。 "ID"属性用于唯一标识菜单,"Name"属性支持国际化,以i18n:开头时自动调用VITR翻译功能。在每个菜单内,通过 Actions设置动作组,每个动作组下包含若干动作。动作组之间自动生成一条横线分割它们。

动作处理器

QuickMenu通过setActionHandler函数设置一个QObject对象作为动作处理器。 这个QObject对象应该具有和设置的Json等同的子对象树结构,且子对象的objectName和Json中的ID相同。 QuickMenu会自动将菜单项的triggered信号连接到动作处理器中对应ID的槽函数。 例如,菜单“File”下的动作组“New”中的动作“Project”,需要设置的handler中有 一个名为File的子对象,该子对象又拥有一个名为New的子对象,而New子对象又有一个名为Project的槽函数。 当用户点击这个菜单项时,QuickMenu会自动调用handler->File->New->Project()函数。

注意这里说的名为均为QObject::setObjectName(),并非其在代码中的变量名。 此外,这要求槽函数使用public slots:显式的标记,否则将找不到该函数。

Warning: 此类计划从0.17.0开始废弃,且暂无替代方案。

成员函数文档

[since Visindigo 0.13.0] QuickMenu::QuickMenu(QWidget *parent = nullptr)

parent 父窗口

构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] QuickMenu::~QuickMenu()

析构函数

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void QuickMenu::loadFromJson(const QString &jsonStr)

jsonStr JSON字符串

从Json字符串加载菜单结构。Json字符串必须符合QuickMenu的规范,否则可能会导致解析失败或运行时错误。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void QuickMenu::setActionHandler(QObject *handler)

handler 动作处理器

设置动作处理器。动作处理器是一个QObject对象,QuickMenu会将菜单项的triggered信号连接到动作处理器中对应ID的槽函数。

这个function 从 Visindigo 0.13.0 开始支持。