2008-12-22 2 views
106

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

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

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

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

ответ

41

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

Qt3

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

Qt4

Qt4 улучшилось на конструкторе значительно. Он больше не генерирует код, но вы можете динамически загружать файлы Designer (в xml) и dynamically connect them to the running objects in your program - без сгенерированного кода, однако вам нужно указать элементы в Designer и придерживаться имен, чтобы не сломать ваш код.

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

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

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

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

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

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

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

+22

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

+1

Стоит отметить, что в Qt3 и начале Qt4 (около 2008 года) Qt Designer не хватало нескольких функций, которые, возможно, были showstoppers для некоторых, таких как отсутствие поддержки ButtonGroups, пользовательских слотов, именования QLayouts и т. Д. Но за последние 5 -6 лет или около того, все эти проблемы были решены. Я предпочитаю использовать файлы пользовательского интерфейса, если это возможно, гораздо проще реорганизовать макеты, и это приводит к значительному сокращению кода для поддержки. –

41

В моем опыте с помощью Qt Designer и других инструментариев/UI-инструментами:

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

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

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

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

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

5

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

+3

Да, это было starnge для меня, но с тех пор, как несколько лет назад, когда я использовал Qt в течение 1 года, я понял, что могу делать более быстрые работы с помощью ручного письма, чем графически. Одна вещь, которой не хватает в ручном написании кодированных ui, нелегко увидеть, как она выглядит, пока она не будет выполнена на экране (и это важный аспект совместных работ иногда). – Joonhwan

+1

То же самое, я не могу терпеть дизайнеров, писать вручную намного мощнее и быстрее для меня, ну это потому, что изначально я был на очень медленном маке, который едва справлялся с перетаскиванием и капельками, а через несколько лет он стал единственным я могу делать проекты :) О том, что не видно, ну через год мне не нужно было его исполнять, все это отображалось в моем воображаемом слое мозга. – ColdSteel

7

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

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

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

4

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

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

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

8

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

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

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

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

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

7

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

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

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

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

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

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

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

+5

Менеджеры макетов не являются взаимоисключающими с дизайнерами GUI. На самом деле любой дизайнер GUI, который не использует какую-либо концепцию менеджера макетов, хуже, чем бесполезно для работы на 99% современных графических приложений. –

2

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

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

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

4

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

6

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

3

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

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

+0

У меня есть несколько оконных диалогов в приложении MFC, которые очень похожи. Недавно я попытался просто поместить все элементы управления в один диалог и скрыть и переместить определенные элементы управления в зависимости от текущего режима приложения. Вы говорите, что в Qt вы можете просто просто создавать элементы управления программным путем? Мне было интересно, будет ли это легче в моем случае. Хотелось бы услышать ваши мысли. – mitch

+0

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

0

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

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

+0

О, точно, как @MOnsDaR говорит – dave

Смежные вопросы