Qt Style Sheets/ro
Stiluri Qt
În anumite circumstanțe s-ar putea să ne dorim să schimbăm aspectul unor widgeturi. S-ar putea să ne dorim doar mici schimbări a modului cum arată interfața sau putem implementa un stil cu totul nou, pentru a da aplicației sau unei suite de aplicații un aspect cu totul unic și distinctiv. Există 3 abordări pentru a redefini aspectul widget-urilor Qt :
# Putem subclasa clasele de widget-uri și reimplementa metodele lor de desenare și de interpretare a evenimentelor de la mouse. Acest lucru ne dă un control total, dar presupune foarte mult efort.
# Putem moșteni clasa "QStyle ":http://doc.qt.nokia.com/4.7-snapshot/qstyle.html sau o clasa de stil predefinită precum "QWindowsStyle":http://doc.qt.nokia.com/4.7-snapshot/qwindowsstyle.html. Acest mecanism este mai puternic. Este folosit de Qt pentru a da aplicației un aspect nativ sistemului de operare.
# Începând cu Qt 4.2 se pot folosi stiluri Qt, un mecanism inspirat de stilurile CSS din programarea web, dar adaptate widgeturilor Qt.
Stilurile Qt sunt specificații textuale care pot fi setate unei întregi aplicații sau unui anumit widget folosindu-ne de funcția "void setStyleSheet( const QString &sheet;)":http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#setStyleSheet . Dacă mai multe stiluri sunt setate la niveluri diferite, Qt derivă stilul efectiv din cele care au fost setate. Acest lucru se numește cascadare.
Stilurile se aplică pe stilul curent al widget-urilor, astfel încât aplicațiile vor avea un aspect nativ sistemului de operare. Dacă se setează culoarea de fond pentru obiectele de tip QPushButton să fie roșu, atunci aceste obiecte vor avea culoarea de fond roșu indiferent de sistemul de operare.
Terminologia și sintaxa stilurilor Qt sunt aproape identice cu cele ale stilurilor CSS HTML. Stilurile se compun dintr-o serie de reguli de stil. O regulă de stil se compune dintr-un selector și o declarație. Selectorul specifică care clasă de widget să fie afectată de regulă, iar declarația specifică ce proprietăți trebuie atribuite unui widget. De exemplu, în următorul stil specificăm că toate obiectele de tip "QLineEdit ":http://doc.qt.nokia.com/4.7-snapshot/qlineedit.html să folosească albastru pentru colorarea fundalului, iar toate obiectele de tip "QLabel":http://doc.qt.nokia.com/4.7-snapshot/qlabel.html să folosească roșu pentru culoarea textului:
QLineEdit { background: blue }<br />QLabel { color: red }
În cazul de mai sus QLineEdit și QLabel sunt selectorii, iar background și color sunt regulile.
Putem specifica mai mulți selectori în aceeași declarație folosind virgule (,) pentru a separa selectorii. De exemplu regula:
QLabel, QLineEdit { color: red }<code>
este echivalentă cu :
QLabel{ color: red }
QLineEdit { color: red }
Regulile se specifică ca un set de perechi proprietate : valoare, separate prin ";" și înconjurate de paranteze ( {} ). De exemplu :
QLineEdit { background-color: orange; color: blue }
Toate exemplele de până acum au folosit cel mai simplu tip de selector. Dar stilurile Qt oferă suport pentru toți selectorii care sunt definiți în CSS2. În următorul tabel sunt prezentați toți selectorii disponibili :
[[Image:https://lh4.googleusercontent.com/-T1dIx4aVYww/TiMJV-C1hKI/AAAAAAAAAOQ/BZI2tmf8rzg/selectori.JPG|https://lh4.googleusercontent.com/-T1dIx4aVYww/TiMJV-C1hKI/AAAAAAAAAOQ/BZI2tmf8rzg/selectori.JPG]]<br />'''Selectorii pentru stilurile Qt'''
Pentru stilizarea unor widget-uri complexe este necesar accesul componentelor unui widget, ca de exemplu butonul de drop-drow al unui QComboBox sau săgețile de sus și jos a unui QSpinBox. De exemplu :
QComboBox::drop-down { image: url(dropdown.png) }
va aplica regula tuturor butoanelor de drop-down ale unui "QComboBox":http://doc.qt.nokia.com/4.7-snapshot/qcombobox.html.
Selectorii pot conține pseudo-stări prin care specificăm un stil pentru o anumită stare a unui widget. Pseudo-stările apar după selector, fiind separat de ":". De exemplu următoarea regulă se aplică atunci când cursorul de mouse se mișca pe deasupra unui obiect de tip "QPushButton ":http://doc.qt.nokia.com/4.7-snapshot/qpushbutton.html :
QPushButton:hover { color: red }
Conflicte pot apărea atunci când diferite reguli de stil specifică aceleași proprietăți, dar cu valori diferite. În acest caz se ia în considerare gradul de specificitate a selectorilor. Un QPushButton#okButton este considerat mult mai specific decât un QPushButton. În mod similar selectorii cu pseudo-stări sunt mai specifici decât selectorii fără pseudo-stări.
Atunci când folosim stilurile Qt orice widget este tratat ca o cutie cu patru dreptunghiuri concentrice:
* dreptunghiul margine;
* dreptunghiul bordură;
* dreptunghiul padding;
* dreptunghiul conținut
https://lh4.googleusercontent.com/-7_wSGnSN8fg/TiMJV81JU0I/AAAAAAAAAOU/PUrRaqBfiA4/model_cutie.JPG
În mod implicit proprietățile de margine, de grosime a bordurii și de padding sunt setate pe zero. În acest caz toate cele 4 dreptunghiuri coincid. Se poate specifica o imagine de fundal pentru un widget prin intermediul proprietății background-image. În mod implicit, imaginea de fundal este desenată doar pentru suprafața din interiorul bordurii. Acest lucru poate fi schimbat folosind proprietatea background-clip. Se pot folosi și proprietățile background-repreat și background-origin pentru a controla repetiția și originea unei imagini de fundal.
O listă cu toate widgeturile ce pot fi personalizate utilizând stiluri Qt și proprietățile ce pot fi modificate "găsiți aici":http://doc.qt.nokia.com/4.7-snapshot/stylesheet-reference.html.