Machete atașate și bare de unelte - qt 4 programare gui pe c

Machete atașate și bare de instrumente

Sunt atașate widget-uri care pot fi atașate anumitor zone din fereastra principală a aplicației QMainWindow sau pot fi ferestre plutitoare independente. QMainWindow are patru zone pentru atașarea unor astfel de widget-uri: una de sus, una de sus, una din partea de jos, una din stânga și una din dreapta widget-ului central. În aplicații precum Microsoft Visual Studio și Lingvista Qt, ferestrele atașabile sunt utilizate pe scară largă pentru a oferi o interfață de utilizator foarte flexibilă. În Qt, widgeturile atașate sunt instanțe ale clasei QDockWidget.







Fiecare widget atașat are un antet propriu, chiar și atunci când este atașat. Utilizatorii pot muta ferestrele atașate de la un punct de montare la altul prin deplasarea barei de titlu. Aceștia pot de asemenea detașa fereastra atașată de zona de montare și o fac o fereastră plutitoare independentă, plasând fereastra atașată în afara zonei de atașare. Ferestrele detașabile care plutesc liber se află mereu pe fereastra principală. Utilizatorii pot închide QDockWidget făcând clic pe butonul de închidere din antetul widgetului. Orice combinație a acestor funcții poate fi dezactivată prin apelarea QDockWidget :: setFeatures ().

Machete atașate și bare de unelte - qt 4 programare gui pe c

Fig. 6.13. QMainWindow cu widget atașat.

În versiunile anterioare ale Qt, barele de instrumente au fost tratate ca widgeturi atașabile utilizând aceleași zone de montare. Începând cu Qt 4, barele de instrumente sunt plasate în zonele proprii, situate în jurul perimetrului widget-ului central (după cum se arată în Figura 6.14) și nu pot fi desprinse. Dacă doriți să aveți o bară de instrumente care plutește, o puteți plasa pur și simplu în interiorul QDockWindow.







Machete atașate și bare de unelte - qt 4 programare gui pe c

Fig. 6.14. Domenii pentru atașarea widget-urilor și a zonelor de bare de instrumente QMainWindow.

Unghiurile indicate prin linii punctate pot să aparțină ambelor zone adiacente de atașare. De exemplu, am putea atribui colțul din stânga sus al zonei de montare din stânga prin apelarea QMainWindow :: setCorner (Qt :: TopLeftCorner, Qt :: LeftDockWidgetArea).

Următorul fragment de cod arată modul în care un widget existent (în acest caz, pentru QTreeWidget) pot fi emise sub forma unui QDockWidget piele și introduceți-l în zona din dreapta de atașament:

QDockWidget * shapesDockWidget = noul QDockWidget (tr ("Forme"));

În apelul pentru setAllowedAreas (), se specifică zona de atașare admisă a ferestrei care urmează să fie atașată. În cazul nostru, permitem utilizatorului să tragă fereastra atașată numai în zona de montare din stânga sau din dreapta, unde există suficient spațiu vertical pentru afișarea normală. Dacă zonele admise nu sunt specificate explicit, utilizatorul poate trage fereastra atașată în oricare dintre cele patru zone.

Mai jos este un fragment din designerul QMainWindow subclasa, care arată modul de a crea o bară de instrumente care conține QComboBox, QSpinBox QToolButton și mai multe butoane:

QToolBar * fontToolBar = nou QToolBar (tr ("Font"));

Dacă vrem să menținem pozițiile tuturor widget-uri de andocare și bare de instrumente, pentru a putea să le restabiliți data viitoare când rulați aplicația, putem scrie aproape același cod, modul de a salva de stat QSplitter separator folosind clasa QMainWindow saveState () și restoreState ():

01 void MainWindow :: writeSettings ()

03 Setările de configurare Q ("Software Inc.", "Editor de pictograme");

05 setări.setValue ("dimensiune", dimensiune ());

06 setări.setValue ("state", saveState ());

09 void MainWindow :: readSettings ()

11 setări QSettings ("Software Inc.", "Editor de pictograme");

În cele din urmă, QMainWindow oferă un meniu contextual în care sunt afișate toate ferestrele atașate și barele de instrumente. Utilizând acest meniu, utilizatorul poate închide și restabili ferestrele atașate și barele de instrumente.

Fig. 6.15. Meniul de context QMainWindow.







Trimiteți-le prietenilor: