QT C++ EĞİTİMİ
Qt C++ eğitimi, Qt'yi sadece UI framework değil cross-platform mimari aracı olarak kullanmak isteyen mühendisleri yetiştirir. Qt'nin signal-slot mekanizması event-driven UI'da somut örneklerle işlenir; QObject ve meta-object system (moc) sezgisel olarak açıklanır.
Program sonunda katılımcı, Qt Quick (QML) ile classic Widget arasında seçim yapar; Model/View architecture ile veri ve görseli ayırır; QThread ile QtConcurrent arasında concurrency modeli seçer. CMake veya qmake ile Qt projesi build etme, Qt6'ya migration ve deprecation planlama eğitimin operasyonel tarafıdır. Eğitim sırasında Qt belgeleri temel referans olarak kullanılır.
Katılımcı Profili
Bu eğitim, Qt'yi sadece UI framework değil cross-platform mimari aracı olarak kullanmak isteyen rollere yöneliktir:
- C++ Geliştiriciler: Cross-platform UI yazan mühendisler
- Masaüstü Uygulama Geliştiricileri: Native masaüstü çözüm yazan ekipler
- Gömülü UI Geliştiricileri: Embedded cihazlarda QML kullanan roller
- Linux Uygulama Geliştiricileri: KDE ekosisteminde geliştiren ekipler
- Endüstriyel Uygulama Geliştiricileri: SCADA ve HMI yazan mühendisler
Ön Gereklilikler
Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:
- C++ temellerini ve OOP (class, inheritance, polymorphism) bilmek
- Pointer, referans ve memory model kavramlarına aşinalık
- CMake veya qmake ile build süreci deneyimi
- Event-driven programlama mantığına giriş düzeyi aşinalık
- Bir IDE deneyimi (Qt Creator tercihen)
Süresi ve Tarihi
Süre: 4 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.
Kazanımlar
Programın sonunda katılımcı, Qt'yi sadece UI framework'ü olarak değil cross-platform mimari aracı olarak kullanır:
- Qt'nin signal-slot mekanizmasını event-driven UI'da kullanır
- QObject ve meta-object system'i (moc) sezgisel açıklar
- Qt Quick (QML) ile classic Widget arasında seçim yapar
- Model/View architecture ile veri ve görseli ayırır
- QThread ile QtConcurrent arasında concurrency modeli seçer
- CMake veya qmake ile Qt projesi build eder
- Qt6'ya migration ve deprecation'ları planlar
Qt C++ Eğitimi Konuları
1. Qt Mimarisi ve Modüller
- Qt çekirdek modülleri: Core, GUI, Widgets, QML
- Qt sürümleri: LTS politikası
- Lisans modeli: Commercial vs LGPL
- Cross-platform desteği: Win, Linux, macOS, mobil
2. Qt Creator, qmake, CMake
- Qt Creator IDE ve kit yönetimi
- qmake klasik build system
- CMake modern Qt6 yaklaşımı
- Conan ve vcpkg ile dependency
3. Meta-Object System ve moc
- Q_OBJECT macro ve meta-object
- moc (Meta-Object Compiler)
- QMetaType ve runtime type info
- Reflection ve introspection
4. Signal ve Slot Mekanizması
- connect() syntax: string-based vs functor
- Qt::ConnectionType (Direct, Queued, Auto)
- Signal-slot tipi uyumsuzluğu
- Lambda slot ve disconnect
- Cross-thread signal/slot
5. QObject ve Bellek Yönetimi
- Parent-child ownership tree
- deleteLater ve event loop
- QPointer ile safe pointer
- QObject neden kopyalanamaz
6. Property System
- Q_PROPERTY macro
- NOTIFY signal ve binding
- Dynamic property
- QML'den C++ property erişimi
7. QWidget vs QML - Hangisi Ne Zaman
- QWidget: desktop, tablo-yoğun UI
- QML: animasyonlu, modern, touch
- Hybrid yaklaşım: QQuickWidget
- Performance ve render farkı
8. Layout Yönetimi
- QHBoxLayout, QVBoxLayout, QGridLayout
- QFormLayout ve QStackedLayout
- Spacer, stretch, alignment
- Size policy ve sizeHint
9. Event System ve Handler
- QEvent ve event loop
- event() vs specific handler (mousePress, keyPress)
- eventFilter ile interception
- Custom event tipi
10. Model/View Architecture
- QAbstractItemModel hiyerarşisi
- QListView, QTableView, QTreeView
- QStandardItemModel ve QSqlTableModel
- QSortFilterProxyModel
- Custom model implementation
11. QML ve Qt Quick
- QML söz dizimi ve declarative UI
- Qt Quick controls ve material/universal style
- Component, property binding
- State, transition, animation
- JavaScript ile logic
12. Threading - QThread, QtConcurrent
- QThread doğru kullanım pattern
- moveToThread() yaklaşımı
- QtConcurrent::run ve future
- QMutex, QReadWriteLock
- QSemaphore ve QWaitCondition
13. Network - QNetworkAccessManager
- HTTP GET, POST, PUT, DELETE
- QNetworkReply ve asenkron handling
- SSL/TLS ve sertifika
- WebSocket QWebSocket
14. Database - QSqlDatabase
- SQLite, PostgreSQL, MySQL driver
- QSqlQuery ve prepared statement
- QSqlTableModel ve QSqlRelationalTableModel
- Transaction yönetimi
15. JSON, XML, Settings
- QJsonDocument, QJsonObject, QJsonArray
- QXmlStreamReader / Writer
- QSettings ile platform-agnostic config
- QStandardPaths ile dizinler
16. Internationalization (i18n)
- tr() ve QObject::tr()
- Qt Linguist ile .ts dosyaları
- lupdate, lrelease ile workflow
- Locale, QLocale, formatting
17. Custom Widget ve Painting
- paintEvent ve QPainter
- QPainterPath, gradient, alpha
- QGraphicsView ve QGraphicsScene
- OpenGL widget
18. Build ve Deploy
- Windows: windeployqt
- macOS: macdeployqt ve code signing
- Linux: AppImage, Flatpak
- Android ve iOS deploy
- Installer: Qt Installer Framework
19. QtTest ve Unit Testing
- QTEST_MAIN ve test case yapısı
- QSignalSpy ile sinyal test
- QBENCHMARK ile performans test
- UI test ile QTest::mouseClick
20. Performance ve Profiling
- QML profiler
- Memory leak detection (Valgrind, ASAN)
- QLoggingCategory ile log filtreleme
- Crash reporter entegrasyon
QT C++ EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları
Signal-slot mekanizması diğer event sistemlerinden ne farkı var?
Signal-slot type-safe, compile-time bağlanır (modern syntax ile), birden fazla slot tek signal'a bağlanabilir. Win32 message map veya callback registration'ına göre temiz; moc preprocessor meta-information üretir. Qt::QueuedConnection ile cross-thread signal güvenli iletişim sağlar.
Qt Quick (QML) ile Qt Widgets arasında karar?
Qt Widgets klasik masaüstü, native look, kompleks form için olgun. QML declarative, GPU-accelerated, animasyon ve modern UI için doğru — özellikle touch, mobil ve embedded. QML JavaScript ile UI logic yazılır. Karma uygulama mümkün ama tek paradigm tercih edilir.
QObject ile meta-object system (moc) nasıl çalışır?
Q_OBJECT macro içeren sınıflar için moc (Meta-Object Compiler) ek source dosyası üretir — signal-slot, dinamik property, runtime type info, internationalization burada doğar. moc build sistemine entegredir (qmake veya CMake otomatik tetikler). C++'a reflection benzeri özellikler katar.
Model/View architecture ne işe yarar?
Veri (model) ve görsel (view) ayırılır; aynı veri farklı view'larda gösterilir, view tipi değişse de model kalır. QAbstractItemModel custom model için temel sınıf, QStandardItemModel hazır. Sort/filter için QSortFilterProxyModel araya girer. Tablo, ağaç, liste için ortak pattern.
QThread ile QtConcurrent arasında ne zaman hangisi?
QThread düşük seviye thread kontrolü — event loop, signal-slot cross-thread için ideal. QtConcurrent task-based — map, filter, future ile data parallelism, sade kullanım. CPU-bound paralel iş QtConcurrent; uzun yaşayan worker thread ile event loop QThread. Yanlış kullanım UI freeze veya deadlock'a yol açar.
Qt5'ten Qt6'ya migration neye dikkat etmeli?
Qt6 C++17 minimum, bazı deprecated API'ler (QString::sprintf, QRegExp) kaldırıldı. QML compatibility import paths değişti. CMake first-class build system (qmake hâlâ destekli). Qt 5 LTS desteği belirli sürede biter; yeni özellikler sadece Qt6'da geliyor. Adım adım migration: önce Qt 5.15 LTS'e, sonra Qt6'ya.



