A jeti123 csapat tanulságai az Alkalmazásfejlesztés házi feladattal kapcsolatban.

.c .h fileok

Mindenképpen javasolt szépen struktúrált .cpp és .h fileokat készíteni, melyeknek beszédes neveik vannak. Ez jelentősen megkönnyíti a projekt átláthatóságát, valamint debuggolásnál is egyértelmű lesz miért és hova ugrálunk.

Osztályok, öröklés

Az előbb leírtak itt is érvényesek, beszédes osztályneveket ajánlott kitalálni. Ne féljünk, ha esetleg hosszúra sikerül, inkább legyen átlátható, a code completion úgy is megkönnyíti a gépelést. Kiemelném, hogy az öröklési mechanizmus egy rendkívül hasznos funkciója a c++ -nak. Ne sajnáljuk az időt attól, hogy egy korrekt ősosztályt alkossunk meg, melyből örökölt példányok könnyebben átláthatóak.

Esetünkben a WindowEventHandling osztályból származnak a szimulátor és a monitor ablakkezelői, rendre MonitorWindowEventHandling és SimulatorWindowEventHandling . Az ősosztály tartalmazza a QML oldali elemek keresésére szolgáló FindItemByName függvényeket, protected öröklési mechanizmussal. A konstruktora átveszi a QQmlContext objektumot, mely tovább öröklődik. Szintén itt kerül deklarálásra az ablakkezelők signal-slot mechanizmusához szükséges virtual öröklődésű ConnectQmlSignals függvénye, mely az alosztályokban az override kulcsszóval felülírható mint pl.: void ConnectQmlSignals(QObject *rootObject) override; Ennek segítségével az örököltetett osztályok saját módon írhatják felül az adott függvényt.

c++ és QML környezet közötti változó átadás

Ez talán a grafikus felület egyik alapvető működési feltétele. Ha nem vagyunk képesek átadni a cpp oldali változóinkat a grafikus felületet alkotó QML-nek, szinte semmi értelme GUI-t készíteni. Ez persze visszafelés is igaz, hiszen olykor pl. egy csúszkával beállított értéket kell a cpp oldalon megvalósított funkciónknak átadni.

A probléma megoldása a következő:

cpp -> QML: “QString”

cpp -> QML: “QVector”

cpp -> QML: “2D vektor”

Kommunikáció a QML oldalról a CPP oldalnak

Grafikonok rajzolása qml oldalon

Ha nagyon nincs ötlete az embernek, hogyan lehet qml-ből grafikont rajzolni, akkor érdemes szétnézni a példák között. A Qt Creator Welcome felületéről is elérhetőek gyorsan, az Examples gomb alatt. Ezek közül mi a Qml Weather és Qml F1 Legends példa alapján készítettük el a saját grafikonunkat. Ebben a snippet-ben a ChartView általunk felfedezett lehetőségeit szeretnénk bemutatni.

ChartView

Egyszerűen lehet grafikont rajzoltatni vele, mi a hőmérséklet kijelzésére használtuk. Az idő előre haladtával a grafikon is változott, mindig az utolsó pár értéket jelenítette meg.

ChartView
{
    id: chartView
    animationOptions: ChartView.SeriesAnimations
    antialiasing: true

    ValueAxis{
        id: valueAxisY
        min: 10
        max: 40
        titleText: "Temperature [°C]"
    }

    LineSeries {
        id: tempNappali
        axisX: valueAxisX
        axisY: valueAxisY
        name: "Nappali"
    }
// ...

Befejezésül

A házi feladattal rendkívül sokat tanultunk, nem csak QML és CPP programozás terén, de abban is jelentős tapasztalatra tettünk szert, hogyan kell megfelelően struktúrált kódot készíteni és hogyan kell azt átláthatóan ledokumentálni. Reméljük a leírtakkal segíteni tudtunk mindazoknak, akik még az első lépéseket teszik a házi feladat megoldása során.