Mulți dintre noi suntem într-o continuă căutare. O călătorie infinită căreia ne este foarte greu să îi stabilim o destinație. Poate că această călătorie nu are nevoie de o destinație, are nevoie doar de pasiune. Pe parcursul călătoriei noastre printre limbajele de programare întâlnim multe puncte intermediare pline de aventuri. Uneori acestea ne împiedică să mergem mai departe sau priveliștea lor ne dezamăgește, dar pentru cele care ne fascinează prin simplitatea și frumusețea lor, merită să mergem mai departe.
Călătoria mea abia a început, dar am găsit un punct intermediar la care îmi doresc să fac o pauză și să privesc în jur: QML.
QML (Qt Meta Language sau Qt Modeling Language) este un limbaj declarativ care ne permite să realizăm cu ușurință interfețele grafice dorite. Limbajul QML face parte din modului Qt Quick care conține atât un API pentru QML, cât și unul pentru C++ și este folosit în general la designul aplicațiilor mobile.
Principalele obiecte pe care limbajul QML le oferă sunt Item, Rectangle, Image, MouseArea, Flickable, Row, Column, Text. Fiecare obiect are o listă de proprietăți proprii, dar are acces și la proprietățile obiectului pe care îl moștenește.
Obiectul creat se poate recunoaște prin id. Id-ul este o proprietate esențială atunci când dorim să accesăm obiectul nostru și să îi setăm proprietățile din exterior sau când vrem să conectăm o proprietate a unui obiect de o proprietate a altui obiect. QML impresionează prin ușurința de a crea componente conectate între ele printr-un limbaj implicit și foarte expresiv (spre deosebire de alte limbaje mult mai explicite).
Poziționarea unui obiect se poate face prin setul de proprietăți anchors. În exemplul următor, am folosit anchors pentru a așeza pătratul negru sub pătratul albastru. Indiferent unde vom muta pătratul albastru, cel negru se va afla tot la baza acestuia.
Alternativa în alte medii de dezvoltare ar fi să dăm poziții absolute. De exemplu:
Rectangle {
id: blueRectangle
x: 0
y: 0
}
QML e puțin mai elegant de-atât, dar totuși ne oferă și posibilitatea aceasta.
Poate vi se pare că acest limbaj seamănă cu o combinație între JavaScript și CSS. Asta pentru că așa și e. Obiectele QML sunt de fapt niște obiecte JSON care suportă JavaScript.
Dacă ne uităm peste codul cu ajutorul căruia am creat prima imagine, putem să observăm că avem două fișiere:
Diamond este un obiect customizat care are anumite dimensiuni și o rotație. În main.qml există mai multe obiecte care se întrepătrund (nested objects) formând o ierarhie.
Primul obiect creat este Window. Acesta reprezintă fereastra principală unde obiectele noastre se vor afișa. În interiorul lui, avem definit un Row. În acest caz, Window este părintele Row-ului. Așadar, atunci când ne referim la parent, ne referim la părintele obiectului Row care este Window. Row-ul este centrat în părinte și are la rândul lui anumite dimensiuni. Este util să folosim obiectul Row atunci când dorim ca obiectele din interiorul lui să fie afișate în linie (fără a fi nevoie să definim anchors explicit).
Când instanțiem componenta noastră Diamond, suntem liberi să îi atribuim proprietăți noi sau să îi suprascriem valorile proprietăților existente. Astfel, putem observa că fiecare componentă de tip Diamond are o anumită culoare și un anumit id.
Componentele pot fi extinse prin obiecte definite în back-end, astfel putem evita crearea unui comportament mai complex în QML.
E bine să experimentăm, să lăsăm artistul din noi să-și satisfacă setea de creație și să îmbrățișăm farmecul necunoscutului. Ideea de a nu ști unde va duce drumul respectiv, ne face să mergem mai departe, destinația rămâne un mister care ne stârnește curiozitatea și fără să ne dăm seama, pornim într-o nouă aventură.
Este decizia voastră dacă vreți să setați QML-ul ca punct intermediar în călătoria voastră.