it-swarm.com.ru

Ручной код GUI в сравнении с Qt Designer GUI

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

Я, например, обнаружил, что написание кода вручную было концептуально проще, чем использование Qt Designer, хотя для сложных графических интерфейсов Designer может иметь смысл. Большие графические интерфейсы могут быть возможны с помощью Designer, но со временем ими может стать очень сложно управлять по мере увеличения сложности (это только мое мнение). Я также скачал исходный код AmaroK, чтобы взглянуть на то, что делали эти парни, и обнаружил множество вызовов addWidget () и друзей, но ни один из этих XML-файлов, созданных Designer (кроме: AmaroK не должен быть моим любимым приложением когда-либо любая платформа).

Каков же «правильный» способ создания графического интерфейса? Дизайнер или код? Давайте для этого обсуждения рассмотрим следующие типы GUI:

  1. Простые диалоги, которые просто должны принять ввод, показать некоторый результат и выйти. Давайте предположим, что приложение берет URL-адрес YouTube и загружает видео на жесткий диск пользователя. Вид приложений, с которыми новичок, вероятно, начнется.
  2. Графический интерфейс среднего уровня, например, редактор заметок с несколькими панелями инструментов/меню. Давайте возьмем, к примеру, xPad ( http://getxpad.com/ ). Я бы сказал, что большинство приложений попадают в категорию «утилиты».
  3. Очень сложные графические интерфейсы, такие как AmaroK или OpenOffice. Вы знаете их, когда видите их, потому что они заставляют ваши глаза кровоточить.
110
Ankur Sethi

Наш опыт работы с Designer начался в Qt3.

Qt3

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

Qt4

Qt4 значительно улучшил конструктор. Он больше не генерирует только код, но вы можете динамически загружать файлы Designer (в формате xml) и динамически подключать их к работающим объектам в вашей программе - нет сгенерированного кода, однако вы должны называть элементы в Designer и придерживайтесь имен, чтобы не нарушать ваш код.

Моя оценка состоит в том, что он не так полезен, как Interface Builder в Mac OS X, но в этот момент я мог видеть использование файлов Designer непосредственно в программе.

После Qt3 мы не вернулись в Designer, но все еще используем его для создания прототипов и отладки макетов.

Для ваших проблем:

  1. Вероятно, вы можете избежать использования стандартных диалогов, которые предлагает Qt . QInputDialog или если вы создаете подкласс QDialog, убедитесь, что вы используете QButtonDialogBox , Чтобы убедиться, что ваши кнопки имеют правильную платформу. раскладка.

  2. Возможно, вы могли бы сделать что-то более ограниченное, например xPad, с ограниченными функциональными возможностями Designer.

  3. Я не думаю, что вы могли бы написать что-то вроде OpenOffice исключительно с Designer, но, возможно, дело не в этом.

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

41
Michael Bishop

По моему опыту работы с Qt Designer и другими инструментами/UI-инструментами:

  • Инструменты пользовательского интерфейса ускоряют работу.
  • Инструменты пользовательского интерфейса облегчают настройку макета позже.
  • Инструменты пользовательского интерфейса облегчают/позволяют непрограммистам работать над дизайном пользовательского интерфейса.

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

Я не обнаружил, что масштаб проекта имеет значение. Ваш опыт может отличаться.

Файлы, созданные с помощью инструментов пользовательского интерфейса (я думаю, вы могли бы написать их вручную, если бы вы действительно этого хотели), часто могут динамически загружаться во время выполнения (Qt и GTK + оба предоставляют эту возможность). Это означает, что вы можете вносить изменения в макет и тестировать их без перекомпиляции.

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

41
Steve S

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

  • Работать с Qt Designer, по крайней мере на тот момент, было нереальным вариантом: было слишком много функций, которые нельзя было сделать с помощью Qt Designer;
  • Соглашения и структура, которые должны были быть сохранены, препятствовали использованию Qt Designer;
  • Как только вы начали без Designer, вам, вероятно, трудно вернуться к нему;
  • однако самым важным аспектом было то, что программисты очень привыкли к программированию с использованием vi или emacs, а не с помощью IDE GUI.

Мой собственный опыт, который восходит ок. 4 года, используя Qt3.3, заключается в том, что динамическое поведение в диалогах было невозможно реализовать в Designer.

8
andreas buykx

Просто чтобы сказать, что я написал и поддерживал сложные графические интерфейсы в Qt без использования Qt Designer - не потому, что мне не нравится Qt Designer, а потому, что я никогда не удосужился работать таким образом.

Отчасти это вопрос стиля и того, откуда вы пришли: когда я начал работать с Qt, у меня были ужасные впечатления от Dreamweaver и Frontpage и других визуальных HTML-инструментов, и я намного предпочитал писать код с HomeSite и прибегать к Photoshop для хитрой разметки. проблемы.

В IDE с визуальным кодом есть опасность, что вы пытаетесь сохранить визуальные инструменты, но в конечном итоге вам также придется настраивать код - способами, которые не совсем понятны.

Например, изучая разработку для iPhone, я расстраивался, когда сталкивался с «волшебными» визуальными вещами («перетаскивание из пустого круга в инспекторе соединений на объект в окне Interface Builder ...»), что было бы проще (для мне) понять в старом добром коде.

Удачи с Qt - это отличный инструментарий, как бы вы его ни использовали, и Qt Creator выглядит как отличная среда разработки.

8
Sam Dutton

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

С тех пор как я перешел с Delphi на Java для приложений с графическим интерфейсом (в 2002 году), я никогда больше не использовал дизайнеров. Мне нравятся менеджеры по расположению намного больше. И да, вы получаете стандартный код, но перемещение объектов в конструкторе пользовательского интерфейса может занять столько же времени, сколько и замена шаблонного. Кроме того, я бы застрял с медленной IDE; это хорошо для случая Java/C #, тогда как для Qt (особенно Qt4) это не применимо. Для Qt3 мне интересно, почему нужно редактировать сгенерированный код - нельзя ли было добавить код в другие файлы? По какой причине?

Об обсуждаемых случаях: 1) GUI с ручным кодированием, вероятно, будет быстрее писать, по крайней мере, если вы знаете свои библиотеки. Если вы новичок и не знаете их, вы можете сэкономить время и меньше учиться у дизайнера, поскольку вам не нужно изучать используемые вами API. Но «меньше учиться» является ключевым фактором, поэтому в обоих случаях я бы сказал, что Hand Coded GUI.

2) Строки меню довольно раздражают, чтобы написать код для. Кроме того, подумайте о деталях, как ускорители и так далее. Тем не менее, это зависит от того, что вы привыкли. Через некоторое время, возможно, будет быстрее набрать этот шаблон, чем указывать в конструкторе, чтобы указать все эти свойства, но только если вы действительно сможете печатать как на пишущей машинке (например, для тех администраторов, для которых команды Unix набираются быстрее, чем используя любой графический интерфейс).

3) Я бы расширил ответ по делу № 2 на этот. Обратите внимание, что для платформ Win32 может оказаться возможным, что использование конструкторов, которые генерируют ресурсы Win32 может быть быстрее для загрузки (понятия не имею).

Однако я хотел бы упомянуть потенциальную проблему с использованием Qt Designer там. Случай из реальной жизни: потребовалось несколько секунд (скажем, 10), чтобы загрузить сложное диалоговое окно Java (диалоговое окно Preferences для текстового редактора программиста) с большим количеством опций. Правильным решением было бы загрузить каждую из вкладок только тогда, когда программист захотел увидеть их (я понял это после), добавив отдельный метод к каждому набору предпочтений для построения своего GUI.

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

7
Blaisorblade

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

6
Nejat

Странно, что вы говорите, что написание кода проще, чем манипулирование объектами в графической среде. Это легко.
Дизайнер призван сделать вашу жизнь проще, а в долгосрочной перспективе - сделать ваш код более понятным. В конструкторе легче посмотреть, как выглядит ваш пользовательский интерфейс, затем читать код и пытаться представить, как он может выглядеть.
С текущим Qt вы можете делать практически все из конструктора, и очень мало вещей, которые вы не можете сделать, вы можете исправить с помощью очень небольшого количества строк кода в конструкторе . Возьмем, к примеру, самый простой пример - добавление сигнальное соединение. С помощью дизайнера это так же просто, как двойной щелчок. Без дизайнера вам нужно искать правильную сигнатуру сигнала, редактировать файл .h, а затем редактировать и записывать свой код в файл .cpp. Дизайнер позволяет вам быть выше этих деталей и сосредоточиться на том, что действительно важно - функциональности вашего приложения.

5
shoosh

Я хотел бы сначала обратиться к дизайнеру для разработки графических виджетов. Как упоминалось в других постах, это быстрее. Вы также получаете немедленную обратную связь, чтобы увидеть, выглядит ли она «правильно» и не смущает ли она пользователя. Дизайнер - главная причина, по которой я выбираю Qt вместо других наборов инструментов. В основном я использую конструктор для создания одноразовых диалогов.

Сказав это, я делаю главное окно и любые сложные виджеты вручную…. Я думаю, что именно так и задумал Trolltech. QFormLayout это класс, который они предоставляют, чтобы легко программно создать диалог ввода.

Кстати, конструктор в Qt 4 - это не IDE, как тот, что был в Qt 3. Это просто редактор для редактирования .ui-файлов. Мне так нравится. Новая кроссплатформенная IDE будет называться Qt Creator.

4
Mark Beckwith

Это старый пост, но я бы посоветовал вам взглянуть на Clementine - музыкальный плеер, который (я думаю) происходит от Amarok. Они используют Qt4 и из того, что я вижу, есть папка ui в папке src проекта. В папке ui , как и следовало ожидать, у них есть все виды файлов .ui. Если вы скомпилируете и запустите Clementine, вы увидите, что графический интерфейс довольно сложный и довольно приятный.

4
s5s

Для меня это зависит от того, насколько логика инкапсулирована в виджете/GUI. Если речь идет о простых формах, я предпочитаю использовать QtDesigner.

Если он содержит сложные проверки или взаимодействие, я склонен его программировать.

3
Ben

Мы используем Qt Designer, если кому-то нужно создать графический интерфейс.
Дело в том, чтобы создавать только маленькие виджеты для определенных задач (как вы это делали бы в дизайне классов), а затем собирать их в "parent-gui".

Таким образом, ваши виджеты можно многократно использовать и использовать для Guis по модульному принципу. Вам просто нужно указать, какие сигналы посылает каждый виджет и какие слоты они предоставляют.

Кроме того, мы создаем .ui-файлы, которые могут быть сгенерированы в процессе сборки. До сих пор не было необходимости редактировать эти файлы вручную.

2
MOnsDaR

Создавайте разные части вашего интерфейса
в разных .ui-файлах, используя QtDesigner,
Затем свести их вместе (и добавить сложности) в коде.

Есть вещи, которые вы не можете сделать в Qt Designer, вы можете делать только в коде,
Поэтому Qt Designer - это только одна (замечательная) часть цепочки инструментов .

0
dave