3

我最近开始研究一个关于使用某种形式的声明性语言构建 GUI 的项目。我的意思是我需要描述对象的层次结构,而不指定将用于“显示”该层次结构的 GUI 小部件的类型。例如,对于一些现有的层次结构H,使用 JSON 表示法(或类似的东西):

H = 
{
    "title" : "Label_1"
    "children" : 
    [
        {
            "title" : "Label_2"
            "children": 
            [
                {
                    "title": "Field_A"
                    "type": "Integer"
                    "value": 10
                },

                {
                    "title": "Field_B"
                    "type": "String"
                    "value": "YES"
                }
            ]
         }
    ]
}

有人可以构建一个简单的窗口,通过按下标有“Label_1”的按钮向用户显示。然后窗口可以命名为“Label_2”,并有两个分别标记为“Field_A”和“Field_B”的字段,它们分别接受整数和布尔值。

其他人可以将此层次结构放在树列表中,例如

--------------------------------------------------------
>Label_1                |
    >Label_2            |
        >Field_A        |   10
        >Field_B        |   YES

我的第一个问题是,我是否必须构建某种形式的语言解析器才能实现这样的目标?那我可以使用 JSON 吗?虽然我不需要支持复杂的层次结构,但需要支持互斥的层次结构(例如单选按钮启用/禁用选项)。我觉得它看起来像是某种形式的语言解析与几个运算符。不要误会我的意思,我是机械工程背景,而且我不是经验丰富的程序员。

预先感谢您的意见和帮助。

4

3 回答 3

6

JSON 将是一种选择。XML 将是另一种情况——例如,Microsoft正是为此目的使用XAML (一种 XML 方言),而 W3C 有一个(相当新的) Widget 打包规范(使用 XML 的另一种方言)。其中任何一个都可以让您使用现有的解析器,而不是从头开始构建另一个解析器。

于 2010-02-27T18:19:56.947 回答
5

你在找什么叫做 QML

它是 Qt 基于 JSON 的 GUI 声明性语言。

我想知道同样的事情,所以我开始了一个线程来收集关于开源、声明性 GUI 语言的信息。如果您正在寻找替代品,请查看。

于 2010-06-03T19:56:52.170 回答
2

我只是在基于 Qt 的 C++ 项目上为真实的用户界面环境测试 QML。而且我认为它作为一种声明性语言非常强大,所以如果你已经了解了一些 Qt 基础知识,你就可以使用它。

您可以非常快速地构建现代、专业和美观的用户界面。您还可以轻松地将声明性语言与您的 C++ 代码连接起来,反之亦然。

于 2010-07-15T07:29:22.680 回答