Программирование пользовательского интерфейса совет? - PullRequest
1 голос
/ 18 мая 2010

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

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

Первый - это предоставление координат X, Y каждого двухмерного графического объекта в моем пользовательском интерфейсе. (Я не предпочитаю это решение, потому что не хочу вычислять координаты X, Y каждого графического объекта. логика сделать это легко)

Второй (который я сейчас использую) использует макеты, которые организуют его содержимое в соответствии с размером элемента. В этом решении мне не нужно вычислять координаты X, Y каждого элемента. (Макет делает это для меня.) Но у этого подхода могут быть свои подводные камни.

Я очень новичок в программировании пользовательского интерфейса. Можете ли вы дать мне совет по этому вопросу?

Ответы [ 4 ]

2 голосов
/ 19 мая 2010

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

Менеджеры по раскладке сделают вашу жизнь намного проще. Обработка окон с изменением размера или содержимого различного размера значительно упрощается благодаря менеджерам компоновки.

Я не могу вспомнить, чтобы у каждого была проблема со встроенным в Qt материалом.

1 голос
/ 27 мая 2010

Я предполагаю, что ваша карта рельсов должна быть только схемой реального расположения путей, вы можете создавать компоненты, которые все размещены на сетке, и для каждой ячейки сетки вы реализуете простой алгоритм расположения, в зависимости от ваших требований Вы можете просто заявить, что одна ячейка сетки может иметь только один фактический элемент управления (и сделать ячейки меньше), или для более крупных ячеек у вас есть фиксированные точки для каждого типа элемента управления, или просто расположить элементы управления в ячейке слева направо / сверху вниз, все, что работает для вас. Вы также можете разделить сами клетки на подэлементы, чтобы ограничить элементы управления. Чтобы при масштабировании целого, каждая ячейка могла сообщить элементу управления, какой размер должен быть.

Это также может помочь реализовать вещи в виде слоев на дисплее, например, отделить слой дорожки от слоя управления.

Вы работаете над очень специфическим "нетрадиционным" пользовательским интерфейсом, вам понадобятся некоторые решения, которые соответствуют вашей проблеме.

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

Похоже, у вас есть какое-то рабочее решение, но вы сказали: «Я не предпочитаю это решение, потому что я не хочу вычислять координаты X, Y для каждого графика», если у вас есть графические элементы управления, которые можно разместить в любом месте на Несмотря на то, что код, несмотря на код, вряд ли стоит иметь редактор, в котором пользователь может разместить эти элементы управления. Это может потребовать не так много усилий, как вы думаете, особенно если вы уже используете файл конфигурации для своего интерфейса вместо жестко заданных значений.

Недавно я проделал большую работу по изменению обычного вида элементов qt с помощью стилей, но я не думаю, что обычных частей qt-gui будет достаточно для вашей работы, но подсистема QGraphicsView, вероятно, будет хорошая подгонка, он хорошо масштабируется и хорошо обрабатывает взаимодействия с большим количеством элементов, но трудно дать вам более конкретный ответ, не зная больше деталей

0 голосов
/ 27 мая 2010

Не изобретай велосипед: Унаследуйте ваши объекты от объектов пользовательского интерфейса, например панели, чтобы вы могли использовать методы пользовательского интерфейса из этих объектов. В остальном используйте контейнеры или любые другие объекты макета

0 голосов
/ 18 мая 2010

Существует Qt Designer (GUI Builder), который позволяет создавать GUI, как в Visual Studio.

Расчет X, Y вручную - плохой подход - он абсолютно не поддается оценке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...