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.
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.
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.
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ış
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)
İlgili hizmetler
SSS
Qt/QML geliştirme hakkında sıkça sorulan sorular
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.