QML ListView ve C++ Modelleri (QAbstractListModel) ile Akıcı Listeler

Mobil cihazlarda, gömülü dokunmatik panellerde ve modern masaüstü uygulamalarında binlerce satırlık listeleri (rehber, şarkı listesi, telemetri logları, ağ cihazları) parmak hareketleriyle kaydırırken en ufak bir takılma (jank/stutter) kullanıcı deneyimini doğrudan bozar. Bu tür akıcı arayüzlerde QML ListView C++ modeli entegrasyonu; QML’in esnek delegasyon tasarımını C++’ın sıfır ek yüklü bellek performansı ile harmanlayarak kusursuz 60 FPS […]

C++ ve QML Entegrasyonu: Q_PROPERTY ve contextProperty ile Veri Paylaşımı

Qt Quick ile proje geliştirirken en ideal mimari prensip: “Arayüz QML’de, İş Mantığı ve Donanım Erişimi C++’ta” kuralıdır. QML görsel akıcılıkta rakipsizken; yüksek hesaplama gücü, seri port/CAN bus donanım haberleşmesi ve veritabanı erişimi C++’ın uzmanlık alanıdır. Bu iki dünyayı birbirine bağlayan köprü olan C++ ve QML entegrasyonu, projenin performansını ve kod kalitesini belirleyen en kritik […]

Model/View Mimarisi: QTableView ve QAbstractTableModel ile Büyük Veri Yönetimi

Qt GUI uygulamalarında tablo ve listelerle çalışırken acemi geliştiricilerin düştüğü en büyük tuzak QTableWidget kullanmaktır. 10.000 veya 100.000 satırlık bir veri kümesini QTableWidget içerisine tek tek QTableWidgetItem nesneleri olarak eklemeye kalktığınızda, yüz binlerce C++ nesnesi oluşturulur, bellek tükenir ve arayüz saniyelerce donar. Kurumsal ve yüksek performanslı uygulamalarda Qt Model View mimarisi kullanmak; veriyi arayüzden tamamen […]

Custom Widget Çizimi: QPainter ile Özel Gösterge ve Grafik Yapımı

Qt Framework’ün sunduğu standart butonlar, etiketler ve kaydırma çubukları genel masaüstü yazılımları için fazlasıyla yeterlidir. Ancak endüstriyel otomasyon arayüzleri, telemetri ekranları veya otomotiv panelleri geliştirirken dairesel hız göstergeleri (gauge), dalga formu monitörleri veya özel durum ışıkları tasarlamanız gerekir. Bu tür ileri düzey grafiksel gereksinimlerde QPainter ile custom widget oluşturmak, piksel düzeyinde tam kontrol ve yüksek […]

QSettings ile Uygulama Ayarlarını Kalıcı Olarak Saklamak

Masaüstü ve gömülü Qt uygulamalarında kullanıcı tercihlerinin (son açılan pencere konumu, seçilen seri port, dil seçeneği veya koyu tema tercihi) uygulama kapatılıp açıldığında korunması profesyonel bir kullanıcı deneyiminin vazgeçilmezidir. Qt Framework’ün platformlar arası bir yapılandırma yöneticisi sunan sınıfı QSettings kullanımı, geliştiricileri her işletim sistemi için ayrı dosya formatı ve dizin yapısı tasarlama zahmetinden kurtarır. Bu […]

QNetworkAccessManager ile REST API İstemcisi Yapımı

Modern masaüstü uygulamalarının hemen hemen tamamı bulut servisleri, uzaktan veri tabanları veya IoT cihazlarıyla iletişim kurmak için web API’lerinden faydalanır. Qt ekosisteminde HTTP/HTTPS protokolleri üzerinden ağ istekleri gerçekleştirmek için kullanılan temel sınıf Qt REST API QNetworkAccessManager bileşenidir. QNetworkAccessManager, arka planda tamamen asenkron (bloke etmeyen) bir mimariyle çalışır. Yani bir web isteği gönderdiğinizde, yanıt gelene kadar […]

QSerialPort ile Seri Port Okuma ve Yazma Arayüzü

Gömülü sistemler dünyasında ESP32, STM32, Arduino veya Orange Pi gibi geliştirme kartlarıyla çalışırken, cihazdan toplanan sensör verilerini bilgisayarda gerçek zamanlı görselleştirmek veya cihaza komut göndermek en yaygın ihtiyaçtır. Bu köprüyü kurmanın en kararlı yolu Qt QSerialPort kullanımı ile masaüstü UART arayüzü geliştirmektir. Qt, platform bağımsız (Windows, Linux, macOS) çalışan QSerialPort ve QSerialPortInfo sınıfları sayesinde işletim […]

QThread ile GUI Donmasını Önleme (Worker Pattern)

Masaüstü uygulamalarında kullanıcı deneyimini bozan en büyük problemlerden biri arayüzün kilitlenmesi veya donmasıdır. Bir dosya indirirken, büyük bir veri tabanını işlerken veya karmaşık bir algoritma çalıştırırken pencerenin yanıt vermemesi (Application Not Responding), işlemin ana iş parçacığında (Main/GUI Thread) çalışmasından kaynaklanır. Bu sorunu çözmek için en doğru yaklaşım Qt QThread kullanımı ve Worker Object Pattern mimarisidir. […]

Signals ve Slots Mekanizması: Nesneler Arası Temiz İletişim

Grafiksel arayüz (GUI) programlamada veya olay tabanlı (event-driven) mimarilerde farklı nesnelerin birbirleriyle gevşek bağlı (loosely coupled) şekilde haberleşmesi en kritik tasarım gereksinimidir. Qt framework’ünün kalbinde yer alan Qt signals and slots mekanizması, geleneksel C stili geri çağırım (callback) fonksiyonlarına kıyasla tür güvenli (type-safe), modüler ve okunabilir bir iletişim kanalı sunar. Bu rehberde, signals ve slots […]

Set

Bir diğer Standart Template Library konterneri olan Set yapısı, benzersiz elamanları sıralı bir şekilde saklamamızı sağlar. Ancak set yapısı elemanları set içindeyken düzenlememize izin vermez. Elemanı önce silebilir sonra yeni ve düzenlenmiş halini ekleyebiliriz. Set yapısı Binary search tree algoritmasını kullanır. Set yapısını ne için kullanırız diye soracak olursak, yapmış olduğumuz hesaplamalar sonucu elde ettiğimiz […]