Ресурсы по созданию GUI Layout Manager? - PullRequest
2 голосов
/ 03 октября 2009

Я работал над простым графическим интерфейсом и столкнулся с препятствиями. Я не нашел ни одного примера или даже читаемого источника о том, как создать менеджер макета GUI. Мне было интересно, знает ли кто-нибудь о каких-либо ресурсах по его созданию или о каком-либо исходном коде, который не является загадочным, как движок компоновки Qt.

Ответы [ 2 ]

4 голосов
/ 03 октября 2009

Это зависит от того, что вы подразумеваете под "менеджером по расположению", и я не знаком с Qt, так что это не дает мне большой подсказки.

Если вы имеете в виду такие вещи, как обработка окна с изменяемым размером, я думаю, что соответствующий термин "решатель ограничений". Я никогда не задумывался об этом, но я считаю, что решатели ограничений GUI основаны на линейном программировании - Симплексном алгоритме и всем этом. Возможно, можно что-то сделать с Gaussian Elission , но я далеко не уверен в этом.

Основываясь на быстром поиске "линейного программирования с использованием графического интерфейса пользователя", вы можете найти эту статью из CiteSeerX интересной - есть загрузка в формате PDF. Если вам не нравится загадочное, на первый взгляд, по крайней мере, это не совсем математика, но я подозреваю, что это не легкое чтение. Я думаю, я скоро узнаю, потому что вы заинтересовали меня.

2 голосов
/ 03 октября 2009

В настоящее время я делаю порт Windows для Mozilla XUL. Мой подход не включает методы линейного программирования, как упомянул Стив, но это более объектно-ориентированный подход. Он основан на шаблонах дизайна Composite и Decorator.

Составной шаблон позволяет создавать элементы управления, которые имеют дочерние элементы управления, которые, в свою очередь, могут иметь своих собственных дочерних элементов. Элемент управления отвечает за размещение своих дочерних элементов управления в пределах своего назначенного клиентского прямоугольника.

Например, предположим, что вы хотите реализовать макет, который размещает дочерние элементы управления горизонтально. Затем алгоритм компоновки должен рассчитать ширину каждого дочернего элемента управления, чтобы рассчитать смещения по x для каждого дочернего элемента управления.

Расчет ширины контейнера выполняется путем возврата суммы ширин дочерних элементов управления.

Классы Decorator могут использоваться для добавления дополнительных свойств. Например, MarginDecorator может добавлять интервалы между дочерними элементами управления, ScrollDecorator может использовать полосы прокрутки и т. Д. *

Забавно, желаю удачи!

...