Windows and Dialogs/ro

From Qt Wiki
Revision as of 06:36, 25 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


Ferestre și dialoguri

Generalități

Un widget care nu este inclus într-un widget părinte se numește fereastră. De obicei, ferestrele au o ramă și o bară de titlu, deși este posibil să fie create ferestre și fără asemenea decorațiuni. În Qt, "QMainWindow ":http://doc.qt.nokia.com/4.7-snapshot/qmainwindow.html și alte diverse subclase ale lui "QDialog":http://doc.qt.nokia.com/4.7-snapshot/qdialog.html sunt cele mai obișnuite tipuri de ferestre.

Orice "QWidget":http://doc.qt.nokia.com/4.7-snapshot/qwidget.html care nu are fereastră devine fereastră și va fi listat în taskbar-ul sistemului de operare. Acest lucru este de dorit pentru o singură fereastră, numită și fereastra principală. În plus orice QWidget care are părinte poate deveni fereastră prin setarea flagului "Qt::WA_Window":http://doc.qt.nokia.com/4.7-snapshot/qt.html#WindowType-enum. În funcție de sistemul de management al ferestrelor, ferestrele secundare sunt de obicei puse deasupra ferestrei lor principale și nu apar în taskbar-ul sistemului de operare. Clasele QMainWindow și QDialog setează flag-ul Qt::WA_Window în constructorul lor, întrucât sunt proiectate pentru a fi folosite ca ferestre.

Fereastra principală a unei aplicații furnizează instrumentele pentru construirea unei interfețe principale cu utilizatorul și este creată prin subclasarea QMainWindow . QMainWindow are propriul său layout la care poate fi adăugat o bară de meniu, bară cu instrumente, widget-uri andocabile și o bară de status. Centrul ferestrei principale poate fi ocupat de orice tip de QWidget.

Ferestrele de dialog sunt folosite ca ferestre secundare care prezintă utilizatorului opțiuni și alegeri. Dialogurile sunt create prin subclasarea clasei QDialog și folosind widgeturi și layout-uri pentru implementarea interfeței cu utilizatorul. În plus Qt furnizează un număr de dialoguri specializate care pot fi utilizate pentru niște sarcini standard precum selecția unui fișier sau a unui font.

Fereastra principală

Fereastra princiapală unei aplicații se crează prin subclasarea clasei QMainWindow. O fereastră principală Qt are propriul său layout și putem adăuga o bară de unelte ("QToolBar":http://doc.qt.nokia.com/4.7-snapshot/qtoolbar.html), widget-uri andocabile ("QDockWidget":http://doc.qt.nokia.com/4.7-snapshot/qdockwidget.html), o bară de meniu ("QMenuBar":http://doc.qt.nokia.com/4.7-snapshot/qmenubar.html) și o bară de status ("QStatusBar":http://doc.qt.nokia.com/4.7-snapshot/qstatusbar.html). Centrul ferestrei principale poate fi ocupat de orice tip de widget și se setează prin apelul funcției "void setCentralWidget(QWidget* widget)":http://doc.qt.nokia.com/4.7-snapshot/qmainwindow.html#setCentralWidget.

https://lh6.googleusercontent.com/-irzsFIm9E-o/TiLoLdTWjDI/AAAAAAAAAOA/luYpIPljKto/image001.png
Model de fereastră în Qt

Pentru a adăuga o bară de instrumente mai întâi trebuie să creem o serie de acțiuni. O acțiune este implementată prin clasa "QAction":http://doc.qt.nokia.com/4.7-snapshot/qaction.html. Aceasta asigură o acțiune abstractă a interfeței grafice care poate fi inserată în widgeturi. În aplicații multe comenzi comune pot fi invocate din meniuri, bară de instrumente sau scurtături de tastatură. Cum utilizatorul se așteaptă ca orice comandă să fie efectuată în același mod, indiferent de modul de apelare, este extrem de util să reprezentăm astfel de comenzi ca acțiuni. Acțiunilor le putem asocia o imagine, un text, o scurtătură de tastatură sau un tooltip. Un exemplu în acest sens îl aveți mai jos:

 newAct = new QAction(QIcon(":/images/new.png"), tr("&amp;New;"), this);<br /> newAct->setShortcuts(QKeySequence::New);<br /> newAct->setStatusTip(tr("Crează un nou fisier"));<br /> connect(newAct, SIGNAL (triggered()), this, SLOT (newFile()));


Mai apoi creem barele de instrumente propriu-zise:

 fileToolBar = addToolBar(tr("Fisier"));<br /> fileToolBar->addAction(newAct);<br /> fileToolBar->addAction(openAct);<br /> fileToolBar->addAction(saveAct);<br /> editToolBar = addToolBar(tr("Editare"));<br /> editToolBar->addAction(cutAct);<br /> editToolBar->addAction(copyAct);<br /> editToolBar->addAction(pasteAct);


Aceleași acțiuni pot fi adăugate și la bara de meniu, precum mai jos:

 fileMenu = menuBar()->addMenu(tr("&amp;Fisier;"));<br /> fileMenu->addAction(newAct);<br /> fileMenu->addAction(openAct);<br /> fileMenu->addAction(saveAct);<br /> fileMenu->addAction(saveAsAct);<br /> fileMenu->addSeparator();<br /> fileMenu->addAction(exitAct);

editMenu = menuBar()->addMenu(tr("&amp;Editare;"));<br /> editMenu->addAction(cutAct);<br /> editMenu->addAction(copyAct);<br /> editMenu->addAction(pasteAct);<br /> menuBar()->addSeparator();
<br /> helpMenu = menuBar()->addMenu(tr("&amp;Ajutor;"));<br /> helpMenu->addAction(aboutAct);<br /> helpMenu->addAction(aboutQtAct);

Pentru a seta widget-ul central ne folosim de funcția void "setCentralWidget(QWidget* widget)":http://doc.qt.nokia.com/4.7-snapshot/qmainwindow.html#setCentralWidget precum în exemplul următor :

 textEdit = new QPlainTextEdit;<br /> setCentralWidget(textEdit);

Iar dacă dorim să avem acces la bara de status, folosim funcția "void showMessage(const QString&amp; message, int timeout = 0)":http://doc.qt.nokia.com/4.7-snapshot/qstatusbar.html#showMessage precum mai jos:

 statusBar()->showMessage(tr("Gata"));<code><br /> Iar la final vom obține o fereastră principală ca în imaginile de mai jos :<br /> [[Image:https://lh5.googleusercontent.com/-0VSLxOupaDk/TiLoLXdpNLI/AAAAAAAAAN4/po0_PRGjYx8/image002.png|https://lh5.googleusercontent.com/-0VSLxOupaDk/TiLoLXdpNLI/AAAAAAAAAN4/po0_PRGjYx8/image002.png]]
<br />h2. Ferestre de dialog

<br /> Clasa "QAction ":http://doc.qt.nokia.com/4.7-snapshot/qaction.html este clasa de bază pentru ferestrele de dialog. O fereastră de dialog este o fereastră folosită mai ales pentru sarcini pe termen scurt și comunicări succinte cu utilizatorul.
<br /> Dialogurile pot fi modale, caz în care utilizatorul trebuie  furnizeze informațiile necesare înainte ca lucrul în fereastra principală  poate continua, sau nemodale. Dialogurile nemodale permit utilizatorului  interacționeze și cu alte ferestre ale aplicației.
<br /> Butonul implicit al unui dialog este butonul care este apăsat atunci când utilizatorul apasă tasta Enter. Pentru a seta butonul implicit al unui dialog apelăm funcția : "void setDefault(bool) ":http://doc.qt.nokia.com/4.7-snapshot/qpushbutton.html#default-prop al clasei "QPushButton ":http://doc.qt.nokia.com/4.7-snapshot/qpushbutton.html .
<br /> Atunci când utilizatorul va apăsa tasta Esc într-un fereastră de dialog, se va invoca funcția "void reject()":http://doc.qt.nokia.com/4.7-snapshot/qdialog.html#reject. Acest lucru va duce la închiderea ferestrei.<br /> Qt ne pune la dispoziție un set de dialoguri gata implementate precum :<br />* "QColorDialog":http://doc.qt.nokia.com/4.7-snapshot/qcolordialog.html- asigură o fereastră de dialog prin intermediul căreia putem alege și specifica culori. De exemplu, în cadrul unui program de desenare putem folosi un asemenea dialog pentru a alege culoarea cu care se desenează.

[[Image:http://doc.qt.nokia.com/4.7-snapshot/images/plastique-colordialog.png|http://doc.qt.nokia.com/4.7-snapshot/images/plastique-colordialog.png]]

* "QFileDialog":http://doc.qt.nokia.com/4.7-snapshot/qfiledialog.html - furnizează o fereastră de dialog prin intermediul căreia putem selecta fișiere sau directoare. El permite utilizatorului să navigheze prin sistemul de fișiere. Cel mai ușor mod de a folosi acest dialog este printr-o funcție statică precum în următorul exemplu :<br />

QFileDialog::getOpenFileName(0, "Open Image", "",
"Image (.png.jpg .bmp)");

<br />''' "QFontDialog":http://doc.qt.nokia.com/4.7-snapshot/qfontdialog.html - ne dă posibilitatea să creăm o fereastră de dialog prin care să selectăm un font. Un exemplu de apel aveți mai jos :

QFont font = QFontDialog::getFont(QFont("Helvetica [Cronyx]", 10), 0);

http://doc.qt.nokia.com/4.7-snapshot/images/plastique-fontdialog.png

 QString text = QInputDialog::getText(0, "QInputDialog::getText()",<br /> "Numele tau:", QLineEdit::Normal,QDir::home().dirName());

https://lh4.googleusercontent.com/-RAOUpUIq-aE/TiLuEQPQrjI/AAAAAAAAAOM/E_nB2fWTINA/image006.png

 int ret = QMessageBox::warning(0, "Aplicatia mea",<br /> "Documentul a fost modificat."<br /> "Doriti sa salvati schimbarile?",<br /> QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,QMessageBox::Save);

https://lh5.googleusercontent.com/-xrL_ceXamSk/TiLoK9FfESI/AAAAAAAAANs/nhLmvB3qo2w/image011.png

  • "QPageSetupDialog":http://doc.qt.nokia.com/4.7-snapshot/qpagesetupdialog.html - este o fereastră de dialog care ne oferă opțiuni de printare pentru o pagină.
  • "QPrintDialog":http://doc.qt.nokia.com/4.7-snapshot/qprintdialog.html - ne dă posibilitatea să specificăm configurarea unei imprimante. Putem schimba mărimea foii, orientarea, tipul de imprimare (color sau alb-negru), paginile care urmează să fie printate, respectiv numărul de copii.
  • "QPrintPreviewDialog":http://doc.qt.nokia.com/4.7-snapshot/qprintpreviewdialog.html - putem vedea și configura așezarea în pagină a paginilor pe care urmează să le printăm.
  • QProgressDialog - este o fereastră de dialog care ne informează despre progresul unei operații de lungă durată. Această fereastră dă posibilitatea utilizatorului să anuleze respectiva operație. Următorul cod ne propune o variantă de utilizare a acestei ferestre de dialog:
 qint32 numFiles = 100000;<br /> QProgressDialog progress("Copiaza fisiere…", "Anuleaza copiere", 0,numFiles, 0);<br /> progress.setWindowModality(Qt::WindowModal);<br /> for (int i = 0; i < numFiles; i++) {<br /> progress.setValue(i); if (progress.wasCanceled())break;<br /> }<br /> progress.setValue(numFiles);

https://lh6.googleusercontent.com/-iYsD0-_HJco/TiLoLNf3-8I/AAAAAAAAAN0/ruxSXoVPxDU/image012.png