Qt, içerisinde masaüstü, mobil ve gömülü sistemler de bulunan birçok platforma uygulama geliştirmek için kullanılan çapraz platform bir çatıdır (framework). Onu bu kadar basit tanımlamak elbette biraz tuhaf olsa da giriş cümlesi olarak daha iyi bir tanım düşünemiyorum. Qt ilk başlarda C++ programlama dili için geliştirilen ve çapraz platform desteğine sahip bir GUI (Graphical User Interface, Grafiksel Kullanıcı Arayüzü) kütüphanesi iken, günümüzde geliştirdiği araçlar ve kendine has GUI tasarlama dili ile bunun çok daha fazlasını sağlamaktadır. İsterseniz biraz tarihinden bahsederek nereden nereye geldiğini anlayalım.
Eirik Chambe-Eng ve Haavard Nord isimli iki geliştirici 1990 yılının yazında, ultrason resimleri için bir veritabanı uygulaması üzerinde çalışmaktaydılar. C++ ile yazılan bu uygulamanın hedefi MacOS, Unix ve Windows işletim sistemlerinde kolayca çalışabilir olmasıydı. Elbette o zamanlar C ve C++ dilleri ile resim görüntüleme gibi işletim sistemine ait çağrılarla çalışan uygulama işlevleri yazmak ve bunun her 3 platformda da çalışmasını sağlamak oldukça zor bir işti. Bu iş için Qt adı verilen bir kütüphane geliştirmeye başladılar. Bunu geliştirmeye başladıkları yıl 1991’di.
Bu sırada bu iki geliştirici ilk adı Quasar Technologies olan bir firma kurdular. Daha sonra bu firmanın ismi değişerek Troll Tech oldu. En son ise Trolltech olarak değişti. 20 Mayıs 1995’te Qt’nin 0.90 versiyonu Linux sistemlerinin X11 destekli masaüstü ortamları için dağıtıldı. Dağıtılan bu paketin lisansı Qt Free Edition Licence olarak isimlendirilmekteydi. Bunun diğer özgür yazılım lisanslarından farkı, değiştirilen kaynak kodun yeniden dağıtımına izin verilmemesiydi. Trolltech bu lisansı 1.45 sürümüne kadar kullandı.
O zamanlar C++ ile çapraz platform desteği olan bir GUI kütüphanesi geliştirmek çok zor iken Qt geliştiricileri önce X11 için yaptıkları bu sistemi, daha sonra Windows ve 3.0 sürümünde ise Mac OS X işletim sisteminde çalışacak şekilde tasarlayabilmişlerdi. Daha sonradan lisansı Q Public Licence (QPL) olarak değiştirilse de 2000 yılına kadar GPL (General Public Licence, Genel Kamu Lisansı) ile tam desteği sağlanamadı. 2000 yılında 2.2 sürümü ile resmen GPL v2 lisansına kavuşmuş oldu. Bu uygulama çatısının en popüler olduğu yıllar ise KDE (K Desktop Environment, K Masaüstü Ortamı) masaüstü ortamının bu çatıyı kullarak uygulamalar geliştirmesi olmuştur.
Qt dördüncü sürüme kadar Windows üzerinde GPL lisansı ile dağıtılmadı, hep kapalı kaynak olarak kullanıldı. Bu sürümden sonra Windows altında da GPL lisansı ile dağıtım yapıldı ve bunun yanında GUI yerine konsol uygulamaları da geliştirilebilir hale geldi. 17 Haziran 2008 yılında Nokia firması Trolltech’i satın aldı ve Qt Software adı ile yayımlanan Qt’yi Qt Development Frameworks olarak değiştirdi. 2009 yılında ise Nokia, Qt’yi LGPL (Lesser General Public Licence, Kısıtlı Genel Kamu Lisansı) lisansı ile yayımlamaya başladı. Bu yıllarda Qt 4.5 sürümüne ulaşmıştı. Nokia, Qt ile ilgili çalışmaları Symbian S60 platformu üzerinde yoğunlaştırdı. Daha sonra Şubat 2011’de Nokia, Symbian platformunu geliştirmeyi bıraktı ve bir ay sonra da Qt’nin ticari haklarını Digia firmasına bıraktı.
Eylül 2014’te Digia firması The Qt Company adı verilen firmayı kurdu ve Mayıs 2016’da Finlandiya’nın Helsinki şehrinde QTCOM olarak halka açıldı. Şu anda Qt içerisinde birçok aracı barındıran ve kendine has bir grafik geliştirme diline (QML) sahip olan bir platform haline geldi. Artık gömülü sistemler de dahil olmak üzere birçok alanda Qt’nin izlerini görmek mümkündür. Qt ile geliştirilmiş önemli ve çok kullanılan uygulamaların küçük bir listesini verecek olursam:
- Blackberry 10
- Calibre
- CMake
- GNU Octave
- Google Earth
- KDE Display Manager
- KeePass
- LXQt
- Malwarebytes
- Qt Creator
- Spotify
- TeamSpeak
- TeamViewer
- Telegram
- Oracle VM VirtualBox
- Wireshark
Bunlar gibi daha düzinelerce program Qt platformu ile yazılmış ve dağıtıma sunulmuştur. Sadece masaüstü ortamına değil, mobil ortama da fazlasıyla uyumlu uygulamalar geliştirebilirsiniz. Qt’nin desteklediği tüm platform ve derleyicilerin listesine şu sayfadan göz atabilirsiniz:
http://doc.qt.io/qt-5/supported-platforms.html
Qt, C++’a birçok veri yapısı ve algoritma kazandırmakla beraber onun modüler yapısı sayesinde anlaşılması oldukça kolaydır. Ayrıca dokümantasyonu oldukça temiz ve anlaşılırdır. Dokümantasyonu içerisinde birçok örneğe de ulaşabilirsiniz. Günümüzde çok fazla kullanım alanı olduğu için arkasındaki topluluk da bir hayli fazladır. Bu nedenle takıldığınız yerleri hem Türkçe hem de yabancı topluluk forumlarında rahatlıkla sorabilirsiniz.
Qt’nin modüler yapısından bahsetmiştik. Qt modüller halinde geliştirilen bir çatıdır. Qt’nin modülleri Qt Essentials (Qt Temelleri) ve Qt Add-Ons (Qt Eklentileri) olmak üzere iki gruba ayrılırlar. Qt Essentials hemen hemen bütün sistemlerde çalışabilen ve Qt’nin temel yapısını oluşturan modüllerden meydana gelirken, Qt Add-Ons modüllerinin çalışabilirliği sistemden sisteme değişir. Burada Qt Essentials modüllerinin bir listesini ve ne amaçla kullanıldıklarını vereceğim:
| Modül | Açıklama |
|---|---|
| Qt Core | Grafiksel olmayan ve diğer modüller tarafından kullanılan çekirdek sınıfları içeren modüldür. |
| Qt GUI | GUI elemanları için temel sınıftıları içerir. OpenGL de buna dahildir. |
| Qt Multimedia | Ses (audio), görüntü (video), radyo (radio) ve kamera (camera) fonksiyonelliklerine sahip sınıfları içerir. |
| Qt Multimedia Widgets | Multimedya fonksiyonelliklerini içeren Widget bazlı sınıflardır. |
| Qt Network | Ağ programlamayı daha kolay ve taşınabilir hale getiren sınıfları içerir. |
| Qt QML | QML ve JavaScript dillerini içeren modüldür. |
| Qt Quick | Özelleştirilebilir UI ile yüksek dinamiklikte uygulamalar geliştirmeyi sağlayan tanımlayıcı bir Framework’tür. |
| Qt Quick Controls 2 | Hafif QML tiplerini içerir ve masaüstü, gömülü sistem ve mobil için performansa dayalı uygulama geliştirmek için kullanılır. |
| Qt Quick Dialogs | Bir Qt Quick uygulamasından sistem diyaloglarıyla etkileşimi sağlamak için kullanılan türleri içerir. |
| Qt Quick Layouts | UI’da yer alan Qt Quick 2 tabanlı nesnelerin yerleşimini düzenlemek için kullanılan türleri içerir. |
| Qt Quick Test | Test durumlarının JavaScript fonksiyonu olarak yazılabildiği, QML uygulamaları üzerinde birim test yapmak için kullanılan bir Framework’tür. |
| Qt SQL | SQL ile veritabanı entegrasyonunu sağlayan sıınıfları içerir. |
| Qt Test | Qt uygulamalarını ve kütüphanelerini birim teste tabii tutmak için kullanılan sınıfları içerir. |
| Qt Widgets | Qt GUI’yi C++ Widget’ları ile genişletmeyi amaçlayan sınıfları içerir. |
Burada gördüğünüz modüller temel Qt ekosistemin bir parçasıdır. Qt, C++ üzerine kurulmuş olan bir uygulama çatısı olsa da 4.7 sürümünden sonra geliştiriciler Frontend (Ön Yüz) ve Backend (Arka Yüz) geliştirmeyi ayrı katmanlarda yapmayı hedefleyerek QML (Qt Modelling Language, Qt Modelleme Dili) isimli bir işaretleme dili ortaya çıkarmışlardır. Bu dil XML gibi işaretleme dillerine benzemekle beraber (tıpkı Android Studio’da XML ile arayüz geliştirme yapar gibi) arkaplanı C++ ile yazılmış olan bir uygulamaya kolaylıkla GUI yazma imkanı vermektedir. Ayrıca bunu herhangi bir platformdan bağımsız olarak gerçekleştirmektedir. QML ile beraber arayüz geliştirmede JavaScript de kullanılmaktadır. Böylece bir uygulamanın Frontend kısmını QML ve JavaScript ile, Backend kısmını ise C++ ile yazarak bu iki alanı birbirinden bağımsız geliştirebilirsiniz.
Qt ile geliştirilen uygulamalardan bahsederken Qt Creator ismini de duydunuz. Bu uygulama, tam kapsamlı bir Qt uygulaması geliştirmek için tasarlanmış bir IDE’dir (Integrated Development Envitonment – Tümleşik Geliştirme Ortamı). Bu ortama herhangi bir Qt sürümünü ve herhangi bir derleyiciyi tanıtarak Qt geliştirme kitlerinizi oluşturabilirsiniz. Ayrıca içerisinde ekran tasarımlarını QML koduna dönüştüren program olan Qt Designer‘ın bir benzerini bulabilirsiniz. Yani tek bir satır kod yazmadan bile arayüz tasarımını gerçekleştirme esnekliğine bu program ile sahip olursunuz.
Bunun yanında yükleyici (installer) program yapmaya yarayan araçlar gibi içerisinde birçok aracı barındıran Qt ekosistemi, bu araçların hepsini size yükleme aşamasında seçeneksel olarak sunmaktadır. Şu anda Qt uygulama çatısının ticari, GPL v2, GPL v3 ve LGPL v3 olmak üzere dört farklı lisansı bulunmaktadır. Ticari sürümde Qt ekosisteminin tüm özelliklerinden faydalanabilirken (tabi onu satın almanız gerekli), özgür yazılım lisanslı ürünlerinde ne yazık ki bütün özelliklerinden faydalanamamaktasınız. Fakat, eğer gömülü sistemlerle uğraşmıyorsanız özgür lisanslı versiyonlar büyük ölçüde sizin işinizi görecektir. Bu nedenle bu konuyu çok fazla dert etmenize gerek yoktur.
Qt’nin ilk başta C++ ile kullanılmak için oluşturulduğunu söylesek de günümüzde pek çok programlama dili ile birlikte Qt özelliklerini kullanabilirsiniz. Python, Go, Haskell ve C# gibi programlama dilleri ile de Qt kullanabilirsiniz. Ayrıca burada kullandığınız paket veya kütüphanelerin çoğu açık kaynak lisansı altında dağıtılmaktadır. Bu nedenle onları projelerinizde özgürce kullanabilirsiniz.
Qt pek çok probleme çözüm getirdiği gibi farklı dillerde uygulama geliştirmeye de güzel bir çözüm getirmiştir. Qt Linguist adı verilen program ile Qt ile yaptığınız uygulamaları başka dillere kolay bir şekilde çevirebilirsiniz. Bu program ile bir programın çevrilebilir kısımlarını alabilir ve istediğiniz dile çevirip kaydedebilirsiniz. Daha sonra kaydettiğiniz çevirileri programa kolay bir şekilde entegre edebilirsiniz.
Yine Visual Studio ve Eclipse gibi IDE programlarına Qt entegrasyonu yapmak istediğinizde, Qt size bu imkanı da sağlamaktadır. Yani Qt ekosistemi artık size her türlü uygulama geliştirme imkanını sağlamaktadır. Bu nedenle özellikle GUI konusunda sıkıntı çeken ve optimize programlar yazmayla uğraşan C++ geliştiricileri için çok kullanışlı bir çatıdır. Qt’nin ben bu yazıyı yazarkenki versiyonu 5.13.1 olmakla beraber, en son LTS (Long-term Support , Uzun Süreli Destek) sürümü 5.12.5’tir. LTS sürümünün avantajı, yayımlandıktan sonra 3 seneye kadar güncelleme desteğini almasıdır. Qt’nin sürümleri ve getirdiği yenilikler ile ilgili bilgileri web sitesinden veya farklı kaynaklardan öğrenebilirsiniz. Sürümler ve neleri destekledikleri konusu Qt için önemli bir konudur.








Çok teşekkürler. Okumak büyük bir zevkti.
İhtiyacım olan her bilgiyi buldum. emeğinize sağlık. teşekkürler
Artık bu siteyi sık kullanılanlara ekleme zamanı geldi. Sanırım bağımlı oldum ben sizin yazılarınıza, teşekkürler.
Hocam bu arada ilgili mesaja veya yazıya yorum yapıldığındaki değişiklikleri bildir kısmı çok güzel olmakla birlikte sanırım email adresim kaydedilmiyor. Çünkü uyarı alıyorum. Tekrar teşekkürler başarılarınız daim olsun.