Ручной кодированный графический интерфейс с графическим интерфейсом Qt Designer

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

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

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

  • Простые диалоги, которые просто нужно вводить, показывают некоторый результат и выход. Предположим, что приложение использует URL-адрес YouTube и загружает видео на жесткий диск пользователя. Вид приложений, с которыми начинающий может начинать.
  • Графические интерфейсы промежуточного уровня, например, липкий редактор заметок с несколькими элементами панели инструментов/меню. Например, возьмем xPad (http://getxpad.com/). Я бы сказал, что большинство приложений относятся к категории "утилит".
  • Очень сложные графические интерфейсы, такие как AmaroK или OpenOffice. Ты знаешь их, когда видишь их, потому что у них выходят глаза.

Ответ 1

Наш опыт работы с дизайнером начался в Qt3.

Qt3

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

Qt4

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

Изучая разработку iPhone, например, мне показалось, что это неприятно поражать "волшебные" визуальные материалы ( "перетаскивание из пустого круга в инспекторе подключений к объекту в окне" Конструктор интерфейса "), которое было бы проще (для меня) понять в простом старом коде.

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

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

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

Ответ 12

Постройте различные части пользовательского интерфейса. в разных файлах .ui с помощью QtDesigner,
затем свести их вместе (и добавить осложнения) в код.

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