Естествени Widgets в Qt Designer Qt, C - Блог на програмиста
В тази статия ще ви покажа как бързо и лесно да създадете интерфейс в Qt Designer, както и как да използвате свои собствени уиджети.
Статията описва:
- как да създадете формуляр в Qt Designer и след това да го използвате в програмата (има няколко опции за това, ще говоря само за една);
- как да използвате своя собствена джаджа в Qt Designer. При това исках да взема джаджата от предишната статия, но ми се стори скучна, така че тук също е описана джаджа от тип двоичен брояч.
Моментна снимка на прозореца на програмата, която се оказа при писане на статията, е показана на фиг. 1.
ориз. 1 примерен прозорец, създаден в Qt Designer
В долната част на фигурата има брояч, чиято стойност нараства с дадена честота. Броячът може да се стартира или спре с помощта на съответните бутони.
Никога досега не съм използвал дизайнер. Мислех, че не е достатъчно гъвкав (това е отчасти вярно) и ви позволява да използвате само стандартни контроли. Напоследък обаче изпълних няколко поръчки, при които се наложи да занитя много прозорци, бутони и т.н. (всички контроли бяха стандартни), така че реших да използвам Qt Designer. Бях много доволен от дизайнера, но реших да опитам да използвам персонализирани джаджи в него (има няколко начина за постигане на този резултат, ще ви разкажа само за един от тях) и да напиша статия за него :).
1 джаджа за брояч
Нашият брояч показва всяка стойност в двоична форма, с червен кръг, съответстващ на единица, и бял кръг на нула. Броячът има капацитет и честота, с които съхранената стойност ще нараства.
Списък 1 показва оригиналакод на заглавния файл на брояча.
Списък 1 е доста ясен, ще отбележа само една точка. Бяхме принудени да напишем set метод за задаване на параметрите на брояча, въпреки че очевидно такава настройка може да бъде направена в конструктора. Факт е, че конструкторът на клас, който ще използваме в Qt Designer, трябва да приема само указател към QWidget.
Изпълнението на методите на класа Counter е дадено в листинг 2, докато си струва да се отбележи, че при създаването на таймер 0 се предава като родителски елемент, а не това (ред 6) - това също се дължи на факта, че нашият брояч ще се използва от Qt Designer (той не трябва да съдържа дъщерни елементи). В тази връзка деструкторът на брояча трябва да освободи паметта от таймера (автоматичното събиране на отпадъци няма да работи).
Сега имаме брояч, който ще вградим във формуляра, създаден от Qt Designer.
2 Qt дизайнер
Процесът на създаване на формуляр е много прост - създаваме чист формуляр (докато му даваме име), плъзгаме 2 бутона и QWidget върху него, поставяме ги на позициите, от които се нуждаем, задаваме размерите и най-важното имената (име на обект).
Ако кръстим формата MainUI, автоматично ще бъде създаден файл с име ui_mainui.h, съдържащ класа MainUI. На свой ред класът ще съдържа полета, чиито имена съвпадат с посочените в Qt Designer oojectName.
Сега трябва да кажете на дизайнера, че вместо джаджа, в прозореца трябва да се покаже брояч, за това трябва да изберете „конвертиране в ...“ в настройките на джаджа, да добавите джаджа Counter в прозореца, който се появява (както е показано на фиг. 2) и прозорецът автоматично ще бъде свързан с файла counter.h.
Фиг. Приспособление за трансформиране на 2 прозорецаСега имаме формуляр, съдържащ интерфейса, от който се нуждаем, остава самоизползваи го...
3 Използване на формуляр, създаден в Qt Designer
Нарекох формата си MainUI, джаджата беше наречена m_counter, а бутонът беше наречен съответно m_start и m_stop. В същото време до файла на проекта се появи файлът ui_mainui.h, в пространството на имената на Ui, на който се намира класът MainUI. Има 2 опции за използване на този клас:
- наследство. В този случай трябва да се използва множествено наследяване (например от класовете QWidget и Ui::MainUI). Наследяването от Ui::MainUI трябва да бъде частно, за да реши проблема с наследяването на диаманти;
- агрегиране. Агрегираният клас съхранява указател към формуляр, създаден в QtDesigner. Тази опция ми изглежда по-естествена, въпреки че трябва да имате достъп до елементите на формуляра чрез указател (за разлика от опцията за наследяване).
Заглавният файл на формуляра, използван в програмата, е показан в листинг 3, изпълнението е показано в листинг 4.
В ред 6 на изпълнението формулярът, създаден от дизайнера, е зададен за текущия диалог (този) с помощта на метода setupUI.
По този начин, с почти една мишка, можете да създадете потребителски интерфейс и да използвате нестандартни джаджи. Въпреки това, когато се описва класът Counter, се отбелязват функциите за създаване на уиджети, използвани в Qt Designer (такъв уиджет не може да съдържа дъщерни елементи и неговият конструктор приема един аргумент - указател към родителския диалог).