Qt/QML razvoj s C++ za Embedded HMI

Moderni korisnički interfejsi i robustne C++ arhitekture s Qt 6, QML i Qt Quick – za Embedded sisteme, industrijske aplikacije i cross-platform softver u Njemačkoj.

Qt/QML s C++ – arhitektura koja izdržava

Qt i QML omogućavaju moderne, performantne korisničke interfejse – presudna je čista veza s C++: UI u QML-u, logika i performansno kritični dijelovi u C++u. BitPointer ima više od 20 godina iskustva na C++ projektima i dugogodišnju Qt/QML kompetenciju iz industrijskih i medicinskih Embedded projekata – u cijeloj Njemačkoj za proizvođače i MSP (mala i srednja preduzeća).

Qt/QML novi razvoj i dalji razvoj postojećih sistema
Čista arhitektura: razdvajanje QML UI-a, C++ ViewModela i poslovne logike
Embedded HMI razvoj za Linux, Yocto i sisteme s ograničenim resursima
Analiza performansi i refactoring QML aplikacija
Migracija s Qt Widgets na Qt Quick/QML
Integracija C++ backenda, dizajn QML/C++ interfejsa

Zašto Qt/QML?

Qt je jedan od najzrelijih cross-platform frameworkova za C++ aplikacije. Qt Quick i QML ga proširuju modernim, deklarativnim UI sistemom koji omogućava GPU ubrzano renderiranje, glatke animacije i jasno razdvajanje dizajnera i developera. To čini Qt/QML posebno pogodnim za:

Embedded i industrijski sistemi

Touch HMI, upravljački paneli, upravljanje uređajima – na ARM boardovima, i.MX platformama i Embedded Linux sistemima.

Kućanski aparati i bijela tehnika

Povezani uređaji s touch upravljanjem, WLAN povezivošću i zahtjevnim korisničkim interfejsima.

Medicinska tehnika i laboratorijski uređaji

Precizni korisnički interfejsi u regulisanim okruženjima, sa sljedivom arhitekturom i visokom pokrivenošću testovima.

Cross-platform aplikacije

Jedna baza koda za Linux, Windows, macOS i Embedded targete – bez platformski specifičnog dodatnog napora.

Moderne desktop aplikacije

Profesionalni GUI softver s glatkim prijelazima, responzivnim layoutom i visokim zahtjevima za upotrebljivost.

Robotski i automatizacijski sistemi

Upravljački i vizualizacijski interfejsi za testne sisteme, upravljanje robotima i automatizacijske sisteme.

Qt/QML · Qt Quick · primjeri iz prakse

Qt Quick u praksi

Visokoperformantni real-time HMI, razvijeni s Qt 6, QML i Qt Quick – GPU ubrzano, glatko animirano, arhitektonski čisto.

Combat-UAS · Ground Control Station
Qt/QML HMI dashboard kompanije BitPointer
Combat-UAS · Ground Control Station
Combat-UAS GCS dashboard – Qt/QML
Instrument Cluster · Dark HUD
Industrijski HMI · SCADA
HMI kućanskih aparata · aparat za kafu
HMI aparata za kafu – Qt/QML
HMI kućanskih aparata · mašina za pranje veša
HMI mašine za pranje veša – Qt/QML

Qt, Qt Quick i QML na pregled

Tri pojma se često koriste kao sinonimi, ali opisuju različite slojeve frameworka. To razlikovanje je važno za čistu arhitektonsku odluku:

Pojam Šta je to Za šta se koristi Tipična uloga
Qt C++ framework i platforma Mreža, baze podataka, fajl sistem, paralelna obrada, event sistem, build sistem Osnova svih Qt aplikacija
Qt Quick UI framework za moderne, GPU ubrzane interfejse Renderiranje, animacije, touch interakcija, scene graph Rendering sistem iza QML interfejsa
QML Deklarativni jezik za opis korisničkih interfejsa Layout, stanja, tranzicije, struktura komponenti Jezik kojim se opisuju UI elementi
JavaScript u QML-u Ugrađeni skript jezik Jednostavne UI interakcije, formatiranja, logika vidljivosti Samo za male, UI-specifične zadatke – ne za poslovnu logiku

Prednosti Qt/QML-a

Cross-platform bez kompromisa

Jedna baza koda radi na Embedded Linuxu, Windowsu, macOS-u i drugim targetima. Qt preuzima apstrakciju platforme, bez odricanja od native performansi.

Moderni HMI interfejsi

Qt Quick koristi OpenGL, Vulkan ili Metal za GPU ubrzano renderiranje. Glatke animacije, piksel-precizan prikaz i responzivni layouti – i na hardveru s ograničenim resursima.

Brza UI iteracija

QML omogućava brze izmjene interfejsa bez potpune rekompilacije. Dizajneri i developeri mogu raditi paralelno, jer su UI opis i C++ logika jasno razdvojeni.

Jaka C++ integracija

Qt direktno uvezuje C++ klase u QML. Poslovna logika, podatkovni modeli i sistemski pristupi ostaju u C++u, dok QML preuzima samo prikaz.

Komponente za višekratnu upotrebu

QML komponente se mogu modularno graditi i koristiti u više projekata. To smanjuje napor za nove ekrane i ubrzava dalji razvoj.

Dokazan u regulisanim okruženjima

Qt se koristi u medicinskim uređajima, laboratorijskoj opremi i industrijskim upravljačkim sistemima, gdje su važni stabilnost, dugoročna dostupnost i mogućnost certifikacije.

Tipični rizici u Qt/QML projektima

Qt/QML projekti često zapadaju u probleme kada od ranih prototipova nastaju produktivni sistemi bez prilagođavanja arhitekture. Sljedeći obrasci prema iskustvu dovode do problema u održavanju i gubitka performansi:

Problemi s logikom

  • Previše poslovne logike u QML-u ili JavaScriptu
  • JavaScript kod iz prototipova prerasta u produktivne sisteme
  • Kompleksne kalkulacije u UI threadu
  • Čuvanje podataka direktno u QML objektima
  • Sigurnosno relevantna logika u QML-u/JavaScriptu

Arhitektonski i problemi performansi

  • Blocking I/O u UI threadu
  • Nekontrolirani property bindingi
  • Preveliki, monolitni QML fajlovi
  • Zloupotreba singletona kao globalnog skladišta podataka
  • Loša testabilnost zbog nedostajućih C++ interfejsa

Naši arhitektonski principi

Qt/QML aplikacija je održiva i skalabilna kada su odgovornosti jasno dodijeljene. QML i C++ imaju različite snage – dobra arhitektura ciljano koristi oba:

QML je odgovoran za

  • Prikaz i layout UI elemenata
  • Stanja i prelaze stanja (states, transitions)
  • Animacije i vizuelne efekte
  • Vezivanje na propertije i modele iz C++a
  • Jednostavne UI reakcije na korisničku interakciju

C++ je odgovoran za

  • Poslovnu logiku i poslovna pravila
  • Podatkovne modele (QAbstractListModel, QObject-based ViewModeli)
  • Servise, perzistenciju, mrežnu komunikaciju
  • Pristup hardveru i interfejse (UART, CAN, MQTT)
  • Threading i računski intenzivne operacije

Arhitektonski slojevi na pregled

QML UI
↓ Properties i Signals
ViewModel / QObject
↓ pozivi metoda
Business Logic (C++)
↓
Services (C++)
↓
Perzistencija / mreža / hardver / interfejsi

Upravljanje podacima i podatkovni modeli

Česta greška u Qt/QML projektima je direktno čuvanje podataka u QML objektima. To može biti praktično za prototipove, ali dovodi do problema s performansama, testabilnošću i održavanjem. Naša preporuka:

Podatkovne modele pripremiti u C++u

QAbstractListModel, QAbstractTableModel i QObject-based ViewModeli daju strukturirane podatke QML-u. QML se veže na propertije i modele, ali ne sadrži poslovnu logiku podataka. To omogućava unit testove na C++ nivou bez zavisnosti od UI-a.

Properties i signals kao interfejs

Q_PROPERTY s notify signalom je čist interfejs između C++a i QML-a. Property bindingi u QML-u automatski reaguju na promjene iz C++a. Nema direktnih poziva duboko u C++ model iz QML-a.

Raspodjela logike između QML-a i C++a

Kada logika smije ostati u QML-u?

  • Vidljivost UI elemenata (npr. visible: width > 300)
  • Jednostavna UI stanja (prošireno / skupljeno)
  • Animacije i vizuelni prelazi
  • Formatiranja za prikaz (format datuma, formatiranje jedinica)
  • UI reakcije na korisničku interakciju koje ne donose poslovnu odluku

Kada logika pripada C++u?

  • Poslovna pravila i validacija
  • Kalkulacije i obrada podataka
  • Pristup bazi podataka i perzistencija
  • Mrežna komunikacija (REST, MQTT, sockets)
  • Hardverska komunikacija (UART, CAN, I²C, SPI)
  • Threading i asinhrona obrada
  • Sigurnosno relevantne odluke

Naše usluge u oblasti Qt/QML-a

Razvoj

  • Novi Qt/QML razvoj za Embedded i desktop sisteme
  • Embedded HMI razvoj s Qt Quick na Embedded Linuxu
  • Integracija C++ backenda i dizajn QML/C++ interfejsa
  • Yocto i Embedded Linux integracija

Analiza i savjetovanje

  • Arhitektonsko savjetovanje za Qt/QML projekte
  • Code review s fokusom na arhitekturu, testabilnost i performanse
  • Analiza performansi s Qt Profilerom i flamegraph analizom
  • Analiza postojećih QML struktura i C++ interfejsa

Modernizacija

  • Refactoring postojećih QML aplikacija
  • Migracija s Qt Widgets na Qt Quick/QML
  • Migracija s Qt 4/5 na Qt 6
  • Preuzimanje i dalji razvoj postojećih Qt/QML projekata

Kvalitet i CI/CD

  • Koncepti testiranja za Qt/QML: GTest, Catch2, Qt Test
  • Automatizirani UI testovi sa Squishom
  • CI/CD pipeline-ovi za Qt projekte (CMake, Jenkins, Docker)
  • Build sistemi i upravljanje paketima (CMake, Conan, JFrog Artifactory)

FAQ

Česta pitanja o Qt/QML razvoju

Qt je C++ framework i platforma. Qt Quick je UI framework za moderne, GPU ubrzane interfejse. QML je deklarativni jezik za opis tih interfejsa. Dopunjuju se: Qt daje runtime okruženje i C++ API-je, Qt Quick sistem renderiranja, QML strukturirani opis UI-a.

QML i JavaScript su pogodni za prikaz, stanja, animacije i jednostavne UI reakcije. Kompleksna poslovna logika, kalkulacije, pristup bazi podataka i mrežna komunikacija pripadaju C++u. Logika u QML-u se teže testira, teže održava i može dovesti do problema s performansama, jer se JavaScript ne kompajlira i izvršava se u UI threadu.

Ne, uz ispravnu arhitekturu Qt/QML je vrlo performantan. Qt Quick koristi OpenGL, Vulkan ili Metal za GPU ubrzano renderiranje. Problemi s performansama gotovo uvijek nastaju zbog pogrešne arhitekture: previše aktivnih bindinga, blocking operacija u UI threadu ili previše interpretiranog JavaScripta. Uz čistu C++ vezu i analizu uz pomoć profilera takvi se problemi sistematično identifikuju i otklanjaju.

Qt Widgets su smisleni za klasične desktop aplikacije s native integracijom platforme, kompleksnim formularima ili kada projekat već potpuno počiva na Widgetsima. Qt Quick/QML je bolji izbor za moderne HMI-je, touch interfejse, Embedded sisteme i aplikacije sa zahtjevnim animacijama i vizuelnim efektima. Kod postojećih Widget projekata preporučujemo analizu troškova i koristi prije migracije.

Da. Redovno preuzimamo postojeće Qt/QML projekte. Ulazak obično počinje analizom arhitekture, QML struktura, C++ interfejsa i pokrivenosti testovima. Iz toga izvodimo prioritiziran plan mjera prije nego što započnemo dalji razvoj ili refactoring.

Da. Imamo iskustvo na projektima s Yocto/OpenEmbedded i integracijom Qt-a u custom Embedded Linux image-e. To uključuje BSP prilagođavanja, Qt konfiguraciju za sisteme s ograničenim resursima, integraciju Wayland compositora i uspostavljanje CI/CD pipeline-ova za automatizirane Embedded build-ove.

Planirate ili analizirate Qt/QML projekat?

Opišite nam svoj poduhvat – bilo da je riječ o novom razvoju, refactoringu ili arhitektonskom savjetovanju. Procjenjujemo početno stanje i preporučujemo odgovarajući pristup.