Embedded HMI'lar için C++ ile Qt/QML geliştirme

Qt 6, QML ve Qt Quick ile modern kullanıcı arayüzleri ve sağlam C++ mimarileri – Almanya'da Embedded sistemler, endüstriyel uygulamalar ve platformlar arası yazılımlar için.

C++ ile Qt/QML – kalıcı mimari

Qt ve QML modern, performanslı kullanıcı arayüzleri sağlar – belirleyici olan C++ ile temiz bağlantıdır: UI QML'de, mantık ve performans kritik parçalar C++'ta. BitPointer, endüstriyel ve tıbbi Embedded projelerden 20 yılı aşkın C++ proje deneyimi ve uzun yıllara dayanan Qt/QML yetkinliği getirir – Almanya genelinde üreticiler ve KOBİ'ler (küçük ve orta büyüklükteki işletmeler) için.

Qt/QML ile sıfırdan geliştirme ve mevcut sistemlerin ilerletilmesi
Temiz mimari: QML UI, C++ ViewModel ve iş mantığının ayrımı
Linux, Yocto ve kaynak kısıtlı sistemler için Embedded HMI geliştirme
QML uygulamalarında performans analizi ve refactoring
Qt Widgets'ten Qt Quick/QML'e geçiş
C++ backend entegrasyonu, QML/C++ arayüz tasarımı

Neden Qt/QML?

Qt, C++ uygulamaları için en olgun platformlar arası framework'lerden biridir. Qt Quick ve QML, onu GPU hızlandırmalı render, akıcı animasyonlar ve net bir tasarımcı-geliştirici ayrımı sunan modern, deklaratif bir UI sistemiyle genişletir. Bu da Qt/QML'i özellikle şunlar için uygun kılar:

Embedded ve endüstriyel sistemler

Dokunmatik HMI'lar, kumanda panelleri, cihaz kontrolleri – ARM kartlarında, i.MX platformlarında ve Embedded Linux sistemlerinde.

Ev aletleri ve beyaz eşya

Dokunmatik kullanım, WLAN bağlantısı ve talepkâr kullanıcı arayüzlerine sahip ağa bağlı cihazlar.

Tıbbi teknoloji ve laboratuvar cihazları

Düzenlemeye tabi ortamlarda, izlenebilir mimari ve yüksek test kapsamıyla hassas kullanıcı arayüzleri.

Platformlar arası uygulamalar

Linux, Windows, macOS ve Embedded hedefleri için tek kod tabanı – platforma özel ek yük olmadan.

Modern masaüstü uygulamaları

Akıcı geçişler, duyarlı düzen ve yüksek kullanılabilirlik talebiyle profesyonel GUI yazılımı.

Robot ve otomasyon sistemleri

Test tesisleri, robot kontrolörleri ve otomasyon sistemleri için kontrol ve görselleştirme arayüzleri.

Qt/QML · Qt Quick · Uygulama örnekleri

Pratikte Qt Quick

Qt 6, QML ve Qt Quick ile geliştirilmiş yüksek performanslı gerçek zamanlı HMI'lar – GPU hızlandırmalı, akıcı animasyonlu, mimari olarak temiz.

Combat-UAS · Yer Kontrol İstasyonu
BitPointer'dan Qt/QML HMI panosu
Combat-UAS · Yer Kontrol İstasyonu
Combat-UAS GCS panosu – Qt/QML
Gösterge Paneli · Dark HUD
Endüstriyel HMI · SCADA
Cihaz HMI · Tam otomatik kahve makinesi
Kahve makinesi HMI – Qt/QML
Cihaz HMI · Çamaşır makinesi
Çamaşır makinesi HMI – Qt/QML

Qt, Qt Quick ve QML'e genel bakış

Bu üç terim sıklıkla eş anlamlı kullanılır, ancak framework'ün farklı katmanlarını tanımlar. Bu ayrım, temiz bir mimari kararı için önemlidir:

Terim Ne olduğu Ne için kullanıldığı Tipik rolü
Qt C++ framework'ü ve platform Ağ, veritabanları, dosya sistemi, paralel işleme, olay sistemi, build sistemi Tüm Qt uygulamalarının temeli
Qt Quick Modern, GPU hızlandırmalı arayüzler için UI framework'ü Render, animasyonlar, dokunmatik etkileşim, sahne grafiği QML arayüzlerinin arkasındaki render sistemi
QML Kullanıcı arayüzleri için deklaratif tanımlama dili Düzen, durumlar, geçişler, bileşen yapısı UI öğelerinin tanımlandığı dil
JavaScript in QML Gömülü betik dili Basit UI'ya yakın etkileşimler, biçimlendirmeler, görünürlük mantığı Yalnızca küçük, UI'ya özgü görevler için – iş mantığı değil

Qt/QML'in avantajları

Tavizsiz platformlar arası

Tek kod tabanı Embedded Linux, Windows, macOS ve diğer hedeflerde çalışır. Qt, yerel performanstan ödün vermeden platform soyutlamasını üstlenir.

Modern HMI arayüzleri

Qt Quick, GPU hızlandırmalı render için OpenGL, Vulkan veya Metal kullanır. Akıcı animasyonlar, piksel hassas gösterim ve duyarlı düzenler – kaynak kısıtlı donanımda bile.

Hızlı UI iterasyonu

QML, tam yeniden derleme olmadan arayüzde hızlı değişiklikler sağlar. UI tanımı ve C++ mantığı net biçimde ayrıldığı için tasarımcılar ve geliştiriciler paralel çalışabilir.

Güçlü C++ entegrasyonu

Qt, C++ sınıflarını doğrudan QML'e bağlar. İş mantığı, veri modelleri ve sistem erişimleri C++'ta kalır, QML yalnızca gösterimi üstlenir.

Yeniden kullanılabilir bileşenler

QML bileşenleri modüler olarak kurulabilir ve projeler arası yeniden kullanılabilir. Bu, yeni ekranlar için çabayı azaltır ve geliştirmeyi hızlandırır.

Düzenlemeye tabi ortamlarda kanıtlanmış

Qt; istikrar, uzun vadeli kullanılabilirlik ve sertifikalandırılabilirliğin önemli olduğu tıbbi cihazlarda, laboratuvar ekipmanlarında ve endüstriyel kontrolörlerde kullanılır.

Qt/QML projelerinde tipik riskler

Qt/QML projeleri genellikle, erken prototipler mimari uyarlanmadan üretken sistemlere dönüştüğünde sorun yaşar. Aşağıdaki kalıplar deneyimlerimize göre bakım sorunlarına ve performans kayıplarına yol açar:

Mantık sorunları

  • QML veya JavaScript'te çok fazla iş mantığı
  • JavaScript kodu prototiplerden üretken sistemlere taşınıyor
  • UI thread'inde karmaşık hesaplamalar
  • Verilerin doğrudan QML nesnelerinde tutulması
  • Güvenlik açısından kritik mantığın QML/JavaScript'te olması

Mimari ve performans sorunları

  • UI thread'inde blocking I/O
  • Kontrolsüz property binding'leri
  • Çok büyük, monolitik QML dosyaları
  • Singleton'ın global veri deposu olarak kötüye kullanımı
  • Eksik C++ arayüzleri nedeniyle zayıf test edilebilirlik

Mimari ilkelerimiz

Bir Qt/QML uygulaması, sorumluluklar net biçimde atandığında bakımı kolay ve ölçeklenebilir olur. QML ve C++'ın farklı güçlü yönleri vardır – iyi bir mimari her ikisini hedefli biçimde kullanır:

QML'in sorumluluğunda

  • UI öğelerinin gösterimi ve düzeni
  • Durumlar ve durum geçişleri (States, Transitions)
  • Animasyonlar ve görsel efektler
  • C++'tan gelen property ve modellere bağlanma
  • Kullanıcı etkileşimine basit, UI'ya yakın tepkiler

C++'ın sorumluluğunda

  • İş mantığı ve iş kuralları
  • Veri modelleri (QAbstractListModel, QObject tabanlı ViewModel'ler)
  • Servisler, kalıcılık, ağ iletişimi
  • Donanım erişimleri ve arayüzler (UART, CAN, MQTT)
  • Threading ve hesaplama yoğun işlemler

Mimari katmanlara genel bakış

QML UI
↓ Properties ve Signals
ViewModel / QObject
↓ Metot çağrıları
Business Logic (C++)
↓
Services (C++)
↓
Kalıcılık / Ağ / Donanım / Arayüzler

Veri saklama ve veri modelleri

Qt/QML projelerinde sık yapılan bir hata, verilerin doğrudan QML nesnelerinde tutulmasıdır. Bu prototipler için pratik olabilir, ancak performans, test edilebilirlik ve bakım sorunlarına yol açar. Önerimiz:

Veri modellerini C++'ta sağlama

QAbstractListModel, QAbstractTableModel ve QObject tabanlı ViewModel'ler QML'e yapılandırılmış veri sağlar. QML property ve modellere bağlanır, ancak alan verisi mantığı içermez. Bu, UI bağımlılığı olmadan C++ düzeyinde unit testlere olanak tanır.

Arayüz olarak property'ler ve signal'lar

notify sinyalli Q_PROPERTY, C++ ile QML arasındaki temiz arayüzdür. QML'deki property binding'leri C++'tan gelen değişikliklere otomatik tepki verir. QML'den C++ modeline derinlemesine doğrudan çağrılar yok.

QML ve C++ arasında mantık dağılımı

Mantık ne zaman QML'de kalabilir?

  • UI öğelerinin görünürlüğü (ör. visible: width > 300)
  • Basit UI durumları (açık / kapalı)
  • Animasyonlar ve görsel geçişler
  • Gösterim için biçimlendirme (tarih biçimi, birim biçimlendirme)
  • İş kararı vermeyen, kullanıcı etkileşimine UI'ya yakın tepkiler

Mantık ne zaman C++'a ait?

  • İş kuralları ve doğrulama
  • Hesaplamalar ve veri işleme
  • Veritabanı erişimleri ve kalıcılık
  • Ağ iletişimi (REST, MQTT, socket'ler)
  • Donanım iletişimi (UART, CAN, I²C, SPI)
  • Threading ve asenkron işleme
  • Güvenlik açısından kritik kararlar

Qt/QML alanındaki hizmetlerimiz

Geliştirme

  • Embedded ve masaüstü sistemler için Qt/QML ile sıfırdan geliştirme
  • Embedded Linux üzerinde Qt Quick ile Embedded HMI geliştirme
  • C++ backend entegrasyonu ve QML/C++ arayüz tasarımı
  • Yocto ve Embedded Linux entegrasyonu

Analiz ve danışmanlık

  • Qt/QML projeleri için mimari danışmanlığı
  • Mimari, test edilebilirlik ve performans odaklı kod incelemeleri
  • Qt Profiler ve flame graph analizi ile performans analizi
  • Mevcut QML yapılarının ve C++ arayüzlerinin analizi

Modernizasyon

  • Mevcut QML uygulamalarında refactoring
  • Qt Widgets'ten Qt Quick/QML'e geçiş
  • Qt 4/5'ten Qt 6'ya geçiş
  • Mevcut Qt/QML projelerini devralma ve ilerletme

Kalite ve CI/CD

  • Qt/QML için test konseptleri: GTest, Catch2, Qt Test
  • Squish ile otomatik UI testleri
  • Qt projeleri için CI/CD pipeline'ları (CMake, Jenkins, Docker)
  • Build sistemleri ve paket yönetimi (CMake, Conan, JFrog Artifactory)

SSS

Qt/QML geliştirme hakkında sıkça sorulan sorular

Qt, C++ framework'ü ve platformdur. Qt Quick, modern GPU hızlandırmalı arayüzler için UI framework'üdür. QML ise bu arayüzler için deklaratif tanımlama dilidir. Birbirlerini tamamlarlar: Qt çalışma zamanı ortamını ve C++ API'lerini, Qt Quick render sistemini, QML ise yapılandırılmış UI tanımını sağlar.

QML ve JavaScript gösterim, durumlar, animasyonlar ve basit UI tepkileri için uygundur. Karmaşık iş mantığı, hesaplamalar, veritabanı erişimleri ve ağ iletişimi C++'a aittir. QML'deki mantık daha zor test edilir, bakımı daha zordur ve performans sorunlarına yol açabilir, çünkü JavaScript derlenmez ve UI thread'inde çalışır.

Hayır, doğru mimariyle Qt/QML çok performanslıdır. Qt Quick, GPU hızlandırmalı render için OpenGL, Vulkan veya Metal kullanır. Performans sorunları neredeyse her zaman yanlış mimariden kaynaklanır: çok fazla aktif binding, UI thread'inde blocking işlemler veya çok fazla yorumlanan JavaScript. Temiz C++ bağlantısı ve profiler destekli analizle bu tür sorunlar sistematik olarak tespit edilip giderilebilir.

Qt Widgets; yerel platform entegrasyonu olan klasik masaüstü uygulamaları, karmaşık form maskeleri veya proje zaten tamamen Widgets üzerine kuruluysa mantıklıdır. Qt Quick/QML; modern HMI'lar, dokunmatik arayüzler, Embedded sistemler ve talepkâr animasyon ile görsel efektler içeren uygulamalar için daha iyi seçimdir. Mevcut Widget projelerinde geçişten önce bir maliyet-fayda analizi öneriyoruz.

Evet. Mevcut Qt/QML projelerini düzenli olarak devralıyoruz. Başlangıç genellikle mimarinin, QML yapılarının, C++ arayüzlerinin ve test kapsamının analiziyle olur. Bundan, geliştirmeye veya refactoring'e başlamadan önce önceliklendirilmiş bir eylem planı çıkarıyoruz.

Evet. Yocto/OpenEmbedded ve Qt'nin özel Embedded Linux imajlarına entegrasyonu konusunda proje deneyimimiz var. Buna BSP uyarlamaları, kaynak kısıtlı sistemler için Qt yapılandırması, Wayland compositor entegrasyonu ve otomatik Embedded build'ler için CI/CD pipeline kurulumu dahildir.

Qt/QML projenizi planlayın veya mevcut projenizi analiz ettirin

Projenizi bize anlatın – ister sıfırdan geliştirme, ister refactoring, ister mimari danışmanlığı. Mevcut durumu değerlendirir ve uygun yaklaşımı öneririz.