Ръчно кодиран GUI срещу Qt Designer GUI [затворен]

Прекарвам тези празници, уча се да пиша Qt приложения. Четох за Qt Designer само преди няколко часа, което ме накара да се чудя: какво използват хората, които пишат реални приложения в Qt, за да проектират своите GUI? Всъщност, как хората проектират GUI като цяло?

Аз, например, открих, че писането на кода на ръка е концептуално по-просто от използването на Qt Designer, въпреки че за сложни GUI Designer може да има смисъл. Големи GUI може да са възможни с помощта на Designer, но с времето може да станат много трудни за управление, тъй като сложността се увеличава (това е само мое мнение). Също така изтеглих изходния код на AmaroK, за да надникна какво правят тези момчета, и открих много обаждания към addWidget() и приятели, но нито един от тези XML файлове, създадени от Designer (настрана: AmaroK трябва да е любимото ми приложение някога всяка платформа).

Какъв тогава е "правилният" начин за създаване на GUI? Дизайнер или код? Нека за тази дискусия разгледаме следните типове GUI:

  1. Прости диалогови прозорци, които просто трябва да приемат вход, да покажат резултат и да излязат. Да приемем приложение, което взема URL адрес от YouTube и изтегля видеоклипа на твърдия диск на потребителя. Типът приложения, с които един начинаещ вероятно ще започне.
  2. Графични интерфейси на средно ниво, като например редактор на лепкави бележки с няколко елемента от лента с инструменти/меню. Да вземем например xPad (http://getxpad.com/). Бих казал, че повечето приложения попадат в категорията "помощни програми".
  3. Много сложни GUI, като AmaroK или OpenOffice. Познаваш ги, когато ги видиш, защото карат очите ти да кървят.

person Ankur Sethi    schedule 22.12.2008    source източник


Отговори (12)


Нашият опит с Designer започна в Qt3.

Qt3

В този момент Designer беше полезен главно за генериране на код, който след това ще компилирате във вашето приложение. Започнахме да използваме за тази цел, но с целия генериран код, след като го редактирате, вече не можете да се върнете и да го генерирате отново, без да загубите редакциите си. В крайна сметка просто взехме генерирания код и отсега нататък правехме всичко на ръка.

Qt4

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

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

Не сме се върнали към Designer след Qt3, но все още го използваме за прототипиране и отстраняване на грешки в оформления.

За вашите проблеми:

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

  2. Вероятно бихте могли да направите нещо по-ограничено като xPad с ограничена функционалност на Designer.

  3. Не бих си помислил, че можете да напишете нещо като OpenOffice само с Designer, но може би това не е целта.

Бих използвал Designer като друг инструмент, точно като вашия текстов редактор. След като откриете ограниченията, опитайте различен инструмент за този нов проблем. Напълно съм съгласен със Steve S, че едно от предимствата на Designer е, че някой друг, който не е програмист, може да направи оформлението.

person Michael Bishop    schedule 24.12.2008
comment
Никога не трябва да има нужда от модифициране на код, генериран от uic (компилатора на .ui файлове). Ако е необходима повече функционалност, създайте нов клас, който или наследява от генерирания клас, или го включва като член и добавя необходимия код. - person Parker Coates; 29.12.2008
comment
Струва си да се отбележи, че в Qt3 и началото на Qt4 (около 2008 г.) на Qt Designer липсваха редица функции, които може да са били спирачки за някои, като липса на поддръжка за ButtonGroups, персонализирани слотове, именуване на QLayouts и т.н. Но за последните 5- Около 6 години всички тези проблеми бяха решени. Предпочитам да използвам UI файлове, ако мога, много по-лесно е да се реорганизират оформленията и това води до много по-малко код за поддръжка. - person Brendan Abel; 05.11.2015

Според моя опит с Qt Designer и други инструменти/UI-инструменти:

  • UI инструментите ускоряват работата.
  • Инструментите за потребителски интерфейс улесняват коригирането на оформлението по-късно.
  • UI инструментите улесняват/възможно за не-програмисти да работят върху дизайна на UI.

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

Не открих, че мащабът на проекта прави някаква разлика. Вашият опит може да варира.

Файловете, създадени с UI инструменти (предполагам, че можете да ги напишете на ръка, ако наистина искате) често могат да бъдат динамично заредени по време на изпълнение (и Qt, и GTK+ осигуряват тази функция). Това означава, че можете да правите промени в оформлението и да ги тествате без повторно компилиране.

В крайна сметка мисля, че и необработеният код, и инструментите за потребителски интерфейс могат да бъдат ефективни. Вероятно зависи много от средата, набора от инструменти/инструмента на потребителския интерфейс и разбира се личните предпочитания. Харесвам UI инструментите, защото те ме карат да работя бързо и позволяват лесни промени по-късно.

person Steve S    schedule 22.12.2008

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

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

Моят собствен опит, който датира от ок. 4 години, използвайки Qt3.3, е, че динамичното поведение в диалоговите прозорци не беше възможно да се реализира в Designer.

person andreas buykx    schedule 22.12.2008

Само да кажа, че съм писал и поддържал сложни GUI в Qt, без да използвам Qt Designer -- не защото не харесвам Qt Designer, а защото никога не съм работил по този начин.

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

Има опасност с IDE за визуален код, който се опитвате да запазите в рамките на визуалните инструменти, но в крайна сметка трябва да променяте и кода - по начини, които не са добре разбрани.

Учейки разработката на iPhone, например, открих, че е разочароващо да натискам „магически“ визуални неща („плъзнете от празния кръг в инспектора за връзки към обекта в прозореца на Interface Builder...“), които биха били по-прости (за аз), за да разбера в обикновен стар код.

Успех с Qt -- това е страхотен набор от инструменти, както и да го използвате, а Qt Creator изглежда като страхотна IDE.

person Sam Dutton    schedule 05.01.2009

Бих добавил, че една от причините за използването на графичен дизайнер беше липсата на мениджъри на оформление в Win32, например. Беше възможно само абсолютно позициониране и правенето на това на ръка просто би било гадно.

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

За обсъжданите случаи: 1) Ръчно кодираният GUI вероятно е по-бърз за писане, поне ако знаете вашите библиотеки. Ако сте начинаещ и не ги познавате, можете да спестите време и да научите по-малко с дизайнер, тъй като не е необходимо да изучавате API-тата, които използвате. Но „научете по-малко“ е ключовият фактор, така че и в двата случая бих казал Ръчно кодиран GUI.

2) Лентите с менюта са доста досадни за писане на код. Освен това помислете за детайли като ускорители и т.н. Все пак зависи с какво си свикнал. След известно време може да е по-бързо да въведете тази шаблонна плоча, отколкото да посочите и щракнете върху дизайнера, за да коригирате всички тези свойства, но само ако наистина можете да пишете като на пишеща машина (като онези администратори, за които въвеждането на Unix команди е по-бързо от използвайки произволен GUI).

3) Бих разширил отговора за случай #2 до този. Обърнете внимание, че за Win32 платформи може да е възможно използването на дизайнери, които генерират Win32 ресурси, може да бъде по-бързо зареждане (нямаме идея за това).

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

Ако проектирате всички раздели и превключвателя на раздели заедно с дизайнер, можете ли да направите това толкова лесно? Предполагам, че може да има подобен пример, при който ръчно кодиран GUI ви дава повече гъвкавост и в такова голямо приложение е вероятно да имате нужда от това, дори и само за целите на оптимизацията.

person Blaisorblade    schedule 16.01.2009
comment
Мениджърите на оформлението не се изключват взаимно с GUI дизайнерите. Всъщност всеки GUI дизайнер, който не използва някаква концепция за управление на оформлението, е по-лош от безполезен за работа с 99% от съвременните GUI приложения. - person Steve S; 03.02.2009

Едно от основните предимства на използването на дизайнер за създаване на GUI е, че други програмисти могат лесно да променят или поддържат формуляри и джаджи, без да е необходимо да се задълбочават в сложен код.

person Nejat    schedule 24.02.2014

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

person shoosh    schedule 22.12.2008
comment
Да, беше странно за мен, но отпреди няколко години, когато използвах Qt повече от 1 година, разбрах, че мога да правя по-бързи потребителски интерфейси, като пиша на ръка, отколкото чрез графично проектиране. Едно нещо, което липсва в ръкописния кодиран потребителски интерфейс е, че не може лесно да се види как изглежда, докато не се изпълни на екрана (а това понякога е важен аспект на кооперативните работи). - person Joonhwan; 21.10.2012
comment
Същото тя, не мога да понасям дизайнери, писането на ръка е много по-мощно и по-бързо за мен, добре, това е, защото първоначално бях на много бавен Mac, който почти не се справяше с плъзгане и пускане, и след няколко години това стана единственият начин Мога да правя дизайни :) Около не може да се види, добре след една година нямаше нужда да го изпълнявам, всичко беше картографирано в моя въображен слой на мозъка. - person ColdSteel; 17.06.2015

Обичам първо да се обръщам към дизайнера, за да разработя графични джаджи. Както беше споменато в другите публикации, по-бързо е. Освен това получавате незабавна обратна връзка, за да видите дали „изглежда правилно“ и не е объркващо за потребителя. Дизайнерът е основна причина да избера Qt пред други комплекти инструменти. Най-често използвам дизайнера, за да направя еднократните диалози.

Като казах това, правя главния прозорец и всички сложни уиджети на ръка. Мисля, че това е начинът, по който Trolltech е възнамерявал. QFormLayout е клас, който предоставят за лесно програмно създаване на диалогов прозорец за въвеждане.

Между другото, дизайнерът в Qt 4 не е IDE като този, който имаха в Qt 3. Това е просто редактор за редактиране на .ui файлове. Харесва ми по този начин. Новата кросплатформена IDE ще се нарича Qt Creator.

person Mark Beckwith    schedule 23.12.2008

Това е стара публикация, но бих ви посъветвал да погледнете Clementine - музикален плейър, който (мисля) произлиза от Amarok. Те използват Qt4 и от това, което виждам, има папка ui в папката src на проекта. В папката ui, както може да се очаква, те имат всякакви .ui файлове. Ако компилирате и стартирате Clementine, ще видите, че GUI е доста сложен и доста хубав.

person s5s    schedule 09.05.2012

За мен зависи колко логика е капсулирана в приспособлението/GUI. Ако става въпрос само за прости форми, предпочитам да използвам QtDesigner.

Ако съдържа сложни проверки или взаимодействие, имам склонност да го програмирам.

person Ben    schedule 03.06.2015
comment
Имам няколко диалогови прозореца на прозореца в MFC приложение, които са много сходни. Наскоро се опитах просто да поставя всички контроли в един диалогов прозорец и да скрия и препозиционирам определени контроли въз основа на текущия режим на приложението. Искате да кажете, че в Qt можете лесно просто да изградите контролите програмно? Чудех се дали това би било по-лесно в моя случай. Ще се радвам да чуя вашите мисли. - person mitch; 28.12.2015
comment
Мич, да, в Qt можете да създавате контроли програмно и е МНОГО лесно. Освен това Qt използва динамично оформление и това означава, че диалоговият ви прозорец все още изглежда добре и е използваем, независимо дали добавяте едно квадратче за отметка или двадесет. - person George Y.; 15.01.2016

Ние използваме Qt Designer, ако някой има нужда да създаде Gui.
Работата е да създадете само малки Widgets за определени задачи (както бихте направили в клас-дизайн) и след това да ги съберете заедно в "родител- gui".

По този начин вашите джаджи могат да се използват многократно и могат да се използват за Guis по модулен начин. Просто трябва да посочите кои сигнали изпраща всяка джаджа и кои слотове предоставя.

Освен това създаваме .ui-файлове, които могат да бъдат генерирани по време на процеса на изграждане. Досега нямаше нужда да редактирате тези файлове на ръка.

person MOnsDaR    schedule 19.10.2010

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

Има неща, които не можете да правите в Qt Designer, можете да правите само в код,
така че Qt Designer е само една (страхотна) част от веригата от инструменти.

person dave    schedule 26.02.2017
comment
О, точно както казва @MOnsDaR - person dave; 26.02.2017