Контрол поставяне на джаджи

Qt предлага три основни начина за контрол на настаняването на деца джунджурии по формуляр: абсолютно позициониране, ръчно набиране и управление на конфигурацията. Ние считаме, че всеки един от тях, като пример за диалог "Find File", показан на фигура 6.1.

Контрол поставяне на джаджи

Фигура 6.1. Диалог "Намерете файла".


Абсолютно позициониране - това е "неблагодарна" метода на поставяне на джаджи. При този подход, позицията и размера на приспособления плътно зашива към програмата, която обикновено води до определен размер на самата форма. Обърнете внимание на дизайнер FindFileDialog диалог. която се основава на принципа на абсолютното позициониране: Абсолютно позициониране има много недостатъци. Основният недостатък - невъзможността да промените размера на прозореца. Друг недостатък: етикетите на текстови не могат да се поберат в посочените размери, ако потребителят е избрал голям размер на шрифта, или ако интерфейса на приложението е преведена на друг език. Освен това, този подход изисква от нас да изпълняват слугинска работа за изчисляване на позицията и размера на джунджурии.

При ръчно поставяне контрол на джаджи, ние все още трябва да се определи позицията на отделните компоненти на формата, но техните размери са определени в съответствие с размера на прозореца. Това може да бъде постигнато в резултат на манипулатор припокриване събитие resizeEvent () вида, в който е възможно да се разчита и да се определят нови измерения на деца джаджи:

В конструктора, ние определя минимални размери 215 х 170 форма и първоначалния размер на 365 X 220. resizeEvent на процесора () поставя нови размери на приспособленията, когато прозорецът е оразмерен.

Както е случаят с абсолютно позициониране, ръчно позициониране изисква програмист в предварителния изчисляването на някои константи, които след това плътно пришити в кода на програмата. Писане на такива програми е досаден задача, особено ако тогава ще трябва да се направят промени в дизайна на форми. Както и преди, остава рискът някакъв вид писане във формуляра не се вписва в определеното пространство. Това може да се избегне, като се има предвид "идеален" размера на джаджа, но това допълнително ще усложни кода.

Контрол поставяне на джаджи

Фигура 6.2. Диалог "Намерете файла" Промяна на размера.


Най-добрите джаджи разтвор, пуснати на формата е да се използва оформление мениджъри телепортира. Те осигуряват един разумен размер по подразбиране за всеки тип джаджа и да вземе предвид "идеален" Размерът на всеки един от тях, който, от своя страна, зависи от размера, стила и покажете съдържанието на силата на звука. Освен това, мениджърите на оформлението вземат предвид минималните и максималните размери, и автоматично се настройват местоположението на джаджа в отговор на промяна на шрифта, размера на съдържанието или прозорец.

Qt предлага три типа мениджъри оформление: QHBoxLayout. QVBoxLayout и QGridLayout. Това потомък класове QLayout. която изпълнява основните методи за поставяне на управление. Всички три класа се поддържат напълно от Qt Designer-ти, а също така могат да се използват при писането на кода на ръка. И двете опции употреба бяха обсъдени в глава 2.

По-долу е дизайнер FindFileDialog. която използва мениджъри по разположение:

поставяне компонент от формата на контролирана QHBoxLayout. QGridLayout един и един QVBoxLayout. QGridLayout QVBoxLayout и подредени един до друг сестри вътре QHBoxLayout. Рамката около форма с ширина 11 пиксела, разстоянието между приспособленията за деца - 6 пиксела.

Контрол поставяне на джаджи

Фигура 6.3. Оформлението на диалоговия прозорец "Намери файл".


QGridLayout работи като плоска решетка на клетките. QLabel. в горния ляв ъгъл на областта, се клетки (0, 0), и съответната QLineEdit - (0, 1). QCheckBox комбинира две колони и заема клетка (2, 0) и (2, 1). QListView и QLabel. намиращ се на дъното, просто вземете две клетки. Обадете addMultiCellWidget () има следния синтаксис: къде джаджа - това е дете джаджа, преминали този план за управление, ROW1, col1 - горния ляв и съща клетка от джаджа и ROW2, col2 - долния десен клетка.

Същата диалог може да бъде създаден с помощта на визуална среда за разработка Qt Designer. Пример за работа с визуален строител обсъдихме в глава 2.

Използването на мениджърите за оформление осигурява определени предимства, които преди това са обсъждани. Ако се добавя или премахва от програмката, мениджърът автоматично се адаптира към променящите се условия в района на оформление. Същото важи и за случаите, когато се обадите методи подкомпонент - скрий () и (), за. Ако едно дете джаджа ще се промени на "идеалния" размер, промяната оформление, като се вземе предвид промяната в обстоятелствата. Също така, мениджъри на оформлението автоматично инсталиране на минималния размер на формата като цяло, въз основа на минималния и "идеалната" размера на джунджурии на детето.

Във всички примери, които сме досега считат, ние само комбинирани джаджи и мениджъри оформление добавен допълнителен фиксатор за оползотворяване на свободното място. Но понякога, за местоположението на компонентите е в пълно съответствие с желанията си, това не е достатъчно. В такива ситуации, трябва допълнително да настроите размера на промени в политиката и на "идеалния" размера на джаджа.

преоразмеряване политика казва мениджърът на оформление, джаджа трябва да се разтяга или да се свие. Qt подразбиране дава добър преоразмеряване политика за всички стандартни джаджи стойност, но няма стойност по подразбиране не може да бъде идеален за всички поводи. Ето защо, все още има обичайната практика е да конфигурирате допълнителни политика преоразмеряване за един или двама на приспособления на формата. преоразмеряване политика се определя на всеки от двете посоки (вертикални и хоризонтални). Най-често използваните стойности фиксирани, минимални, максимални, предпочитани и разширяване:

Фиксирана - Widget е с фиксиран размер, т.е. той не може да се разтяга или да се свие. Тя винаги трябва да е "перфектен" (sizeHint ()) размер.

Минимална - "идеален" размер на приспособлението е-малкия възможен размер. Притурката не може да се свие по-малък от този размер, но това може да се разтегне и да заема цялото налично пространство, ако е необходимо.

Максимална - "идеален" размер на приспособлението е максимумът на неговия размер, т.е. Widget може да се компресира до най-малкия възможен размер, но не може да се разтегне повече от "идеал".

Предпочитан - "идеален" размер на приспособлението, за предпочитане е неговия размер, но ако е необходимо, джаджата може едновременно да опъвам и се свива.

Разширяване - и приспособлението може да се удължи и сгъстен, но той предпочита да разтегнете.

Фигура 6.4 обобщава всичко, което е казано по-горе за политика на различни размери на QLabel пример. показва текста "Някои Текст".

Контрол поставяне на джаджи

Фигура 6.4. Различни размери се променят политиката.


Когато резолюцията се променя форма, която включва компоненти с политики Предпочитани и разширяване. допълнително пространство е отделено на Разширяване Приспособленията с политиката. а като предпочитани джаджа пази "идеален" размер.

Има още два политика преоразмеряване: MinimumExpanding и пренебрегнат. Първият от тях е бил използван в по-ранните версии на Qt, въпреки че доста рядко, сега е до голяма степен без значение, тъй като най-добрия резултат дава назначаване Разширяване политика и повторно прилагане на метод (припокриване) minimumSizeHint (). Вторият - по много начини, подобни на разширяване. но той игнорира "идеален" размера на джаджа.

В допълнение към размера на политиката на климата, хоризонтални и вертикални компоненти на визуален компонент, QSizePolicy пазят разтягане фактори. Те се използват за определяне на степента на разтегливост. Например, да предположим, че във формуляра са QListView. а под него - QTextEdit. Ние трябва да се образува при опън QTextEdit нарасна два пъти по-бързо от QListView. За тази цел, вертикален участък фактор (verticalStretch) QTextEdit компонент настройва на 2, и QListView - 1.

Друг начин да се повлияе от порядъка на - за промяна на минималните и максималните размери на джунджурии на детето. Управителят на оформление ще се вземат предвид стойностите на тези параметри.