Controlul plasarea de widget-uri

Qt oferă trei moduri principale de a controla plasarea copilului widget pe un formular: poziționare absolută, plasare manuală și de management a configurației. Considerăm că fiecare dintre ele ca un exemplu de dialog „Find File“, se arată în figura 6.1.

Controlul plasarea de widget-uri

Figura 6.1. Dialog "Find File".


poziționare absolută - este metoda „ingrată“ de a plasa widget-uri. Cu această abordare, poziția și dimensiunea de widget-uri strâns suturat la program, ceea ce presupune de obicei o dimensiune fixă ​​la forma în sine. Aruncati o privire la dialog designer de FindFileDialog. care se bazează pe principiul de poziționare absolută: poziționare absolută are multe dezavantaje. Principalul dezavantaj - incapacitatea de a redimensiona fereastra. Un alt dezavantaj: etichetele de text nu se pot încadra în dimensiunea specificată, în cazul în care utilizatorul a selectat o dimensiune mare de font, sau în cazul în care interfața aplicației a fost tradusă într-o altă limbă. În plus, această abordare ne cere să efectueze muncă laborioasă de calcul poziția și dimensiunea de widget-uri.

Cu controlul manual plasarea de widget-uri, avem încă nevoie să definească poziția componentelor pe formular, dar dimensiunile lor sunt stabilite proporțional cu dimensiunea ferestrei. Acest lucru poate fi realizat din cauza tratare a evenimentului suprapunere resizeEvent () forma în care este posibil să se numere și de a defini noi dimensiuni de widget-uri pentru copii:

In constructorul, am stabilit dimensiunile minime de 215 X 170 formă și dimensiunea inițială de 365 X 220. procesoare resizeEvent () stabileste noi dimensiuni ale widget-uri atunci când fereastra este redimensionată.

Așa cum este cazul cu poziționare absolută, plasarea manuală necesită programator la calculul preliminar al anumitor constante, care apoi sunt bine cusute în codul programului. Scrierea unor astfel de programe este o sarcină plictisitoare, mai ales dacă, atunci trebuie să facă schimbări în proiectarea de formulare. Ca și înainte, rămâne riscul ca un fel de scris, pe formular nu se încadrează în spațiul alocat. Acest lucru poate fi evitat, având în vedere dimensiunea „ideală“ widget-ului, dar va complica și mai mult codul.

Controlul plasarea de widget-uri

Figura 6.2. Dialog "Find File" resizable.


Cele mai bune widget soluție plasate pe formular este de a utiliza managerii de aspect Qt. Ele oferă o dimensiune rezonabilă, în mod implicit, pentru fiecare tip de widget și să ia în considerare dimensiunea „ideală“ pentru fiecare dintre ele, care, la rândul lor, depind de dimensiunea, stilul, și afișează conținutul volumului. În plus, managerii de aspect să ia în considerare dimensiunile minime și maxime, și în mod automat ajustați locația widget-ului, ca răspuns la schimbarea fontului, conținutul sau dimensiunea ferestrei.

Qt oferă trei tipuri de manageri de aspect: QHBoxLayout. QVBoxLayout și QGridLayout. Acest descendent clase de QLayout. care pune în aplicare metodele de bază de plasare de management. Toate cele trei clase sunt pe deplin susținute de Qt Designer-lea, și, de asemenea, poate fi utilizat la scrierea codului de mână. Ambele opțiuni de utilizare au fost discutate în Capitolul 2.

Mai jos este un designer FindFileDialog. care utilizează managerii de plasament:

amplasarea componentelor pe forma unui QHBoxLayout controlat. QGridLayout unul și unul QVBoxLayout. QGridLayout QVBoxLayout și aranjate unele lângă celelalte surori din interiorul QHBoxLayout. Rama in jurul formei având o lățime de 11 pixeli, distanța dintre copil widget-uri - 6 pixeli.

Controlul plasarea de widget-uri

Figura 6.3. Dispunerea de dialog „Find File“.


QGridLayout funcționează ca o grilă fixă ​​de celule. QLabel. în colțul din stânga sus al zonei, a celulei (0, 0) și QLineEdit corespunzătoare - (0, 1). QCheckBox combină două coloane și ocupă o celulă (2, 0) și (2, 1). QListView și QLabel. situat în partea de jos, să ia doar două celule. Call addMultiCellWidget () are următoarea sintaxă: în cazul în care widget-ul - este widget copil, a trecut acest manager aspect, ROW1, col1 - celula din stânga sus ocupat de widget-ul și ROW2, col2 - mai mici de celule dreapta.

Același dialog poate fi creat folosind un constructor vizual Qt Designer. Un exemplu de lucru cu constructor vizual, am discutat în Capitolul 2.

Folosind managerii de aspect oferă anumite avantaje, pe care le-am discutat anterior. Dacă se adaugă sau eliminate din widget-ul, managerul se adaptează automat la schimbarea condițiilor din zona de aspect. Același lucru este valabil și pentru cazul atunci când apelați metode subcomponente - ascunde () și spectacol (). În cazul în care un widget copil se va schimba „ideală“ dimensiunea, schimbare de aspect, ținând cont de circumstanțele schimbate. De asemenea, managerii de aspect instala automat dimensiunea minimă a formei în ansamblu, bazat pe minimă și dimensiunea „ideală“ a copilului widget-uri.

In toate exemplele pe care le-am considerat până acum, am doar widget-uri combinate și manageri de aspect adăugat distanțier suplimentar pentru utilizarea spațiului liber. Dar, uneori, la locația componentelor este pe deplin în conformitate cu dorințele noastre, acest lucru nu este suficient. În astfel de situații, trebuie să se adapteze în continuare dimensiunea modificărilor de politică și dimensiunea „ideală“ a widgetului.

politica de redimensionare spune managerul de aspect, un widget ar trebui să se întindă sau micșora. Qt implicit dă bună valoare pentru redimensionarea politicii toate widget-uri standard, dar nu există nici o valoare implicită poate să nu fie ideale pentru toate ocaziile. Prin urmare, există încă practica obișnuită este de a configura politica suplimentară de redimensionare pentru una sau două widget-uri de pe formular. politica de redimensionare este atribuit fiecăruia dintre cele două direcții (verticală și orizontală). Cele mai frecvent utilizate valori fixe, minime, maxime, preferate și extinderea:

Fix - Widget este o dimensiune fixă, adică, el nu se poate întinde sau micșora. Ar trebui să fie întotdeauna „perfectă“ (sizeHint) () dimensiune.

Minim - dimensiunea „ideală“ widget-ului este cea mai mică dimensiune posibilă. Widget-ul nu poate contracta mai mică decât această dimensiune, dar se poate întinde și să ocupe tot spațiul disponibil, dacă este necesar.

Maximă - „ideală“ dimensiunea widget-ului este maximul de dimensiunea sa, care este, Widget poate fi comprimat la cea mai mică dimensiune posibilă, dar nu se poate întinde mai mult decât „ideal“.

Preferate - dimensiunea „ideală“ widget-ului, este de preferat dimensiunea sa, dar, dacă este necesar, widget-ul poate atât întinde și micșora.

Extinderea - și widget-ul poate fi întins și comprimat, dar el preferă să se întindă.

Figura 6.4 rezumă tot ceea ce a fost spus mai sus despre politicile de diferite dimensiuni pe exemplu QLabel. afișează textul „Unele text“.

Controlul plasarea de widget-uri

Figura 6.4. Diverse dimensiuni schimba politica.


Atunci când rezoluția este modificată forma care include componente cu politici preferate și extinderea. spațiu suplimentar este dat widget-uri expandabile cu politica. în timp ce ca widget preferate păstrează „ideală“ dimensiune.

Există alte două Redimensionarea politica: MinimumExpanding și Ignorată. Primul dintre acestea a fost utilizat în versiunile anterioare ale Qt, deși destul de rar, este acum în mare parte lipsită de relevanță, din moment ce cel mai bun rezultat dă numire politica și re-punerea în aplicare a (suprapunere) metoda minimumSizeHint () Extinderea. Al doilea - în mai multe moduri similare pentru a extinde. dar ignoră dimensiunea „ideală“ a widgetului.

În plus față de dimensiunea schimbare de politică, componentele orizontale și verticale ale componentei vizuale, QSizePolicy păstrează factori stretching. Ele sunt folosite pentru a defini gradul de extensibilitate. De exemplu, să presupunem că în formular sunt QListView. și sub ea - QTextEdit. Avem nevoie de a forma atunci când se întinde QTextEdit a crescut de două ori mai repede decât QListView. În acest scop, factorul întindere vertical (verticalStretch) componenta QTextEdit setat la 2 și QListView - 1.

Un alt mod de a influența ordinea - pentru a schimba dimensiunile maxime ale copilului widgeturi și minime. Managerul aspect se va lua în considerare valorile acestor parametri.