GUI з ручним кодуванням Versus Qt Designer GUI [закрито]


115

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

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

Який же "правильний" спосіб створити графічний інтерфейс? Дизайнер чи код? Давайте для цього обговорення розглянемо такі типи графічних інтерфейсів:

  1. Прості діалоги, які просто потребують введення, показують певний результат та вихід. Припустимо, програма, яка бере URL-адресу YouTube і завантажує відео на жорсткий диск користувача. Різновиди програм, з яких починається новачок.
  2. GUI середнього рівня, як, скажімо, редактор наліпок заміток з кількома елементами панелі інструментів / меню. Візьмемо для прикладу xPad ( http://getxpad.com/ ). Я б сказав, що більшість програм, що належать до категорії "комунальні послуги".
  3. Дуже складні графічні інтерфейси, такі як AmaroK або OpenOffice. Ви їх знаєте, коли бачите їх, тому що вони змушують кровоточити ваші очі.

Відповіді:


44

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

Qt3

На той момент дизайнеру було корисно головним чином генерувати код, який ви потім складете у свою програму. Ми почали використовувати для цієї мети, але з усім згенерованим кодом, коли ви його відредагуєте, ви більше не зможете повернутися та відновити його, не втрачаючи змін. Ми в кінцевому підсумку просто взяли згенерований код і зробили все вручну відтепер.

Qt4

Qt4 значно покращився на дизайнері. Ви більше не генеруєте код, але ви можете динамічно завантажувати свої файли дизайнера (у xml) та динамічно підключати їх до запущених об’єктів у вашій програмі - але жодного згенерованого коду, однак, ви повинні називати елементи в конструкторі та дотримуватися з іменами, щоб не порушити ваш код.

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

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

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

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

  2. Можливо, ви можете зробити щось більш обмежене, наприклад xPad з обмеженою функцією дизайнера.

  3. Я не думаю, що ви можете написати щось на кшталт OpenOffice виключно з Designer, але, можливо, це не в цьому.

Я б використовував Дизайнер як інший інструмент, як і ваш текстовий редактор. Як тільки ви знайдете обмеження, спробуйте інший інструмент для цієї нової проблеми. Я повністю згоден зі Стівом S, що одна з переваг дизайнера полягає в тому, що хтось інший, хто не програміст, може робити макет.


23
Ніколи не повинно змінюватися код, породжений uic (компілятор файлу .ui). Якщо потрібна додаткова функціональність, створили новий клас, який або успадковує згенерованого класу, або включає його як член та додає необхідний код.
Паркер Коутс

1
Варто зазначити, що в Qt3 та на початку Qt4 (близько 2008 р.) У Qt Designer не вистачало ряду функцій, які, можливо, були дещо зупиненими, наприклад, відсутність підтримки ButtonGroups, користувацьких слотів, іменування QLayouts тощо. Але для останніх 5- Через ці 6 років усі ці проблеми були вирішені. Якщо я можу, я вважаю за краще використовувати файли інтерфейсу, набагато простіше реорганізувати макети, і це призводить до набагато меншого коду для підтримки.
Брендан Абель

42

З мого досвіду роботи з Qt Designer та іншими інструментами / UI-інструментами:

  • Інструменти інтерфейсу прискорюють роботу.
  • Інструменти інтерфейсу полегшують налаштування макета пізніше.
  • Інструменти інтерфейсу полегшують / дозволяють непрограмістам працювати над дизайном інтерфейсу.

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

Я не виявив, що масштаб проекту має значення. Ваш досвід може відрізнятися.

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

Зрештою, я думаю, що і сирий код, і інструменти інтерфейсу можуть бути ефективними. Це, мабуть, дуже багато залежить від оточення, інструментарію / інтерфейсу користувача та, звичайно, особистих переваг. Мені подобаються інструменти користувальницького інтерфейсу, тому що вони швидко і швидко працюють, а згодом дозволяють легко змінювати.


8

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

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

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


8

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

Частково це питання стилю і звідки ви беретеся: коли я почав працювати на Qt, я мав жахливі враження Dreamweaver та Frontpage та інших візуальних інструментів HTML, і далеко вважав за краще писати код з HomeSite та звертатися до Photoshop для хитрого макета проблеми.

Ідентифікація візуального коду існує небезпека, яку ви намагаєтеся зберегти у візуальних інструментах, але в кінцевому підсумку доведеться також підробляти код - способами, які недостатньо добре зрозумілі.

Наприклад, вивчаючи розробку iPhone, мені здається, що страшно потрапити на "магічні" візуальні речі ("перетягнути з порожнього кола інспектора підключень до об'єкта у вікні Builder інтерфейсу ..."), що було б простіше (для мене) зрозуміти в простому старому коді.

Удачі з Qt - це чудовий інструментарій, однак ви його використовуєте, і Qt Creator виглядає як чудовий IDE.


7

Додам, що однією з причин використання графічного дизайнера була відсутність, наприклад, менеджерів макетів у Win32. Можливе лише абсолютне позиціонування, і робити це вручну було б просто смоктало.

Оскільки я перейшов з Delphi на Java для програм GUI (ще в 2002 році), я більше ніколи не використовував дизайнерів. Мені подобаються менеджери верстки набагато більше. І так, ви отримуєте код котлової панелі, але переміщення об'єктів на дизайнері інтерфейсу може зайняти стільки ж часу, як і зміна котла. Плюс, я б застряг у повільному IDE; це для випадку Java / C #, гаразд, тоді як для Qt (особливо Qt4) це не застосовується. Для Qt3 мені цікаво, чому слід редагувати згенерований код - чи не вдалося додати код в інші файли? З якої причини?

Про обговорювані випадки: 1) Графічний графічний інтерфейс із ручним кодом швидше пишеться, принаймні, якщо ви знаєте свої бібліотеки. Якщо ви новачок і не знаєте їх, ви можете економити час і менше вчитися з дизайнером, оскільки вам не потрібно вивчати API, який ви використовуєте. Але "вчитися менше" є ключовим фактором, тому в обох випадках я б сказав, що ручний графічний інтерфейс.

2) Меню рядків дуже дратує написання коду. Крім того, подумайте про деталі, як прискорювачі тощо. Все-таки це залежить від того, до чого ти звик. Через деякий час може бути швидше набрати цю коробку, ніж навести та натиснути на дизайнера, щоб виправити всі ці властивості, але тільки якщо ви дійсно можете ввести текст, як на машинці (як ті адміністратори, для яких введення команд Unix швидше, ніж за допомогою будь-якого графічного інтерфейсу).

3) Я б поширив відповідь на випадок №2 до цього. Зауважте, що для платформ Win32 можливо, що використання дизайнерів, які генерують ресурси Win32, може швидше завантажуватися (про це не має уявлення).

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

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


5
Менеджери макетів не є взаємовиключними з дизайнерами GUI. Насправді, будь-який дизайнер GUI, який не використовує якусь концепцію диспетчера макетів, гірший, ніж марний для роботи над 99% сучасних GUI-додатків.
Стів S

7

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


5

Дивно, що ви говорите, що писати код простіше, ніж маніпулювати об'єктами в графічному середовищі. Це не манітор.
Дизайнер є для того, щоб полегшити ваше життя, і в перспективі зробить ваш код більш ретельним. Простіше заглянути в дизайнера, щоб побачити, як виглядає ваш інтерфейс, а потім прочитати код і спробувати уявити, як він може виглядати.
За допомогою поточного Qt ви можете зробити майже все з дизайнера, і дуже мало речей, які ви не можете зробити, ви можете виправити дуже мало рядків коду в конструкторі. Візьмемо для прикладу найпростіший приклад - додавання сигнального слотового з'єднання. Використовувати дизайнер - це так само просто, як подвійне клацання. Без конструктора вам потрібно шукати правильний підпис сигналу, відредагувати .h-файл, а потім відредагувати записати свій код у .cpp-файл. Дизайнер дозволяє бути вище цих деталей і зосередитись на тому, що насправді має значення - функціональності вашої програми.


3
Так, це було для мене зіркою, але приблизно з декількох років тому, коли я використовував Qt більше 1 року, я зрозумів, що я можу робити швидші роботи з інтерфейсу вручну, ніж за допомогою графічного проектування. Одне, чого не вистачає рукописного кодованого інтерфейсу, це те, що його неможливо легко побачити, як це виглядає, поки він не буде виконаний на екрані (і це важливий аспект спільної роботи іноді).
Joonhwan

1
Це ж я не можу терпіти дизайнерів, писати вручну для мене набагато потужніше і швидше, ну це тому, що спочатку я був на дуже повільному mac, що ледь справлявся з перетягуванням, а через кілька років це став єдиним способом Я можу робити конструкції :) Про це не видно, ну і через рік мені це не потрібно було виконувати, все це було відображено в моєму шарі уявлення мозку.
ColdSteel

4

Мені подобається спочатку звернутися до дизайнера, щоб розробити віджети GUI. Як згадувалося в інших посадах, це швидше. Ви також отримуєте негайний зворотній зв'язок, щоб побачити, чи "він виглядає правильно" і чи не бентежить його користувач. Дизайнер є головною причиною того, що я вибираю Qt над іншими інструментами. В основному я використовую конструктор для створення одноразових діалогів.

Сказавши це, я вручну роблю головне вікно та будь-які складні віджети. Я думаю, що саме так задумав Trolltech. QFormLayout - це клас, який вони надають для легкого програмного створення діалогового вікна введення.

До речі, дизайнер у Qt 4 - це не IDE, як той, який вони мали у Qt 3. Це просто редактор для редагування файлів .ui. Мені це подобається. Нова кросова платформа IDE називатиметься Qt Creator.


4

Це стара публікація, але я б радив вам поглянути на Клементину - музичний плеєр, який (я думаю) походить від Amarok. Вони використовують Qt4, і, як я бачу, є папка ui в папці src проекту. У папці ui, як можна очікувати, у них є всілякі файли .ui. Якщо ви компілюєте і запускаєте Clementine, ви побачите, що графічний інтерфейс досить складний і досить приємний.


3

Для мене залежить, наскільки логіка інкапсульована у віджет / графічний інтерфейс. Якщо мова йде лише про прості форми, я вважаю за краще використовувати QtDesigner.

Якщо він містить складні перевірки або взаємодію, я схильний її програмувати.


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

Мітч, так, у Qt можна керувати елементами управління програмно, і це ДУЖЕ легко. Також Qt використовує динамічний макет, і це означає, що ваш діалог все ще виглядає добре і є корисним, якщо ви додасте один прапорець або двадцять.
Джордж Ю.

2

Ми використовуємо Qt Designer, якщо комусь потрібно створити Gui.
Річ у тому, щоб створити лише маленькі віджети для певних завдань (як ви робили в класі-дизайні), а потім об'єднати їх у "батьків-гуй".

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

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


0

Створіть різні частини вашого інтерфейсу
в різних .ui файлах за допомогою QtDesigner,
а потім об'єднайте їх (і додайте ускладнення) у код.

У Qt Designer є речі, які ви не можете зробити, ви можете робити лише в коді,
тому Qt Designer - це лише одна (чудова) частина ланцюга інструментів .


Про точно так , як @MOnsDaR каже
Дейва
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.