GUI декларативная языковая реализация - PullRequest
3 голосов
/ 27 февраля 2010

Я недавно начал работать над проектом, касающимся построения графического интерфейса, используя некоторую форму декларативного языка. Я имею в виду, что мне нужно описать иерархию объектов без указания типа графических элементов, которые будут использоваться для «показа» этой иерархии. Например, для некоторой существующей иерархии 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 тогда? Хотя мне не нужно поддерживать сложные иерархии, необходимо поддерживать взаимоисключающие иерархии (что-то вроде переключателей для включения / выключения опций). У меня такое ощущение, что это выглядит как какая-то форма синтаксического анализа языка с парой операторов. Не поймите меня неправильно, я инженер по машиностроению, и я не опытный программист.

Заранее спасибо за ваши комментарии и помощь.

Ответы [ 3 ]

5 голосов
/ 27 февраля 2010

JSON будет одним из вариантов. XML был бы другим - например, Microsoft использует XAML (диалект XML) именно для этой цели, а W3C имеет (довольно новую) спецификацию упаковки виджетов (используя другой диалект XML). Любой из них позволит вам использовать существующие парсеры вместо создания еще одного с нуля.

4 голосов
/ 03 июня 2010

То, что вы ищете, называется QML

Это декларативный язык Qt GUI, основанный на JSON.

Мне было интересно то же самое, поэтому я запустил поток для сбора информации о декларативных языках с открытым исходным кодом GUI. Если вы ищете альтернативы, проверьте это.

1 голос
/ 15 июля 2010

Я просто тестирую QML для реальной среды пользовательского интерфейса в проекте C ++, основанном на Qt. И я думаю, что он очень мощный как декларативный язык, поэтому, если вы уже знаете некоторые основы Qt, вы можете использовать его.

Вы можете очень быстро создавать современные, профессиональные и привлекательные пользовательские интерфейсы. И вы также можете без труда соединить декларативный язык с вашим кодом C ++ и наоборот.

...