QT Nedir?


Qt, belli bir platforma bağımlı kalmadan uygulamalar yapmak amacıyla oluşturulmuş bir geliştirme ortamı, aynı zamanda da bir geliştirme kütüphanesidir. 1995 yılında Trolltech adlı Norveç’ li bir firma tarafından geliştirilmiştir. Daha sonra ise Haziran 2008 de Nokia tarafından satın alınmıştır.
 Peki, belli bir platforma bağımlı kalmadan derken neyi kastediyoruz? Qt kullanarak geliştirdiğiniz uygulamaları üzerinde herhangi bir değişiklik yapmadan pek çok masaüstü bilgisayar ve gömülü işletim sistemlerinde kullanabilirsiniz. Qt, MacOS 10.2.8+, X11 ile UNIX (Linux, FreeBSD, Solaris) ve Windows 98/NT/2000/XP ve üzerini desteklemektedir. Qt ile yazmış olduğunuz kodları bu platformlar arasında rahatça taşıyabilirsiniz.
Qt, başlangıçta paralı olarak piyasaya sürülmüştü. KDE masaüstü ortamı Ot ile geliştiriliyordu. Ancak bu ilk başlarda tepkiyle karşılandı çünkü o zamanlar Qt GPL lisanslı değildi. KDE gibi tamamen açık kaynak kodlu bir işletim sisteminin masaüstünün kapalı bir arayüz kütüphanesiyle geliştirilmesi tepki çekti ve bunun sonucunda Qt, GPL lisansı ile lisanslandı. Ancak siz ticari bir yazılım yapmak ve de kodlarınızı açmak istemiyorsanız Qt’nin ticari yazılımlar için olan sürümünü kullanabilirsiniz.
Qt genellikle görsel uygulamalar yazacak C++ geliştiricileri tarafından tercih edilmektedir. Ancak Qt yi sadece bir görsel uygulama kütüphanesiymiş gibi düşünmek de yanlış olur. Qt bünyesinde her türlü araç ve kütüphaneyi barındıran çok geniş bir ortamdır. Qt ‘nin içerisinde veritabanı ve network uygulamaları geliştirmek için gerekli birçok fonksiyon bulunmaktadır. Özellikle veritabanı konusunda Qt çok büyük kolaylıklar sağlamaktadır. Qt,  Oracle,Ms Sql Server, Sybase Adeptive Server, IBM DB2, PostgreSQL, MySQL, Borland Interbase, SQLite, ve ODBC-uyumlu tüm veritabanlarını desteklemektedir.
Qt C++ geliştiricileri tarafından tercih ediliyor dedik. Peki, Qt ‘yi C++ dışında bir dil ile kullanmak mümkün müdür? Elbette. Qt’ nin C++ dışında Java, Phyton, Ruby, C# gibi dillerle de bağlantıları vardır.
Buraya kadar Qt nin birçok özelliğinden bahsetmiş olduk. Şimdi ise sizlere Qt araçları hakkında bilgi vermek istiyorum. Qt’ yi kurduğunuzda arayüz tasarlamak için kullanılan Designer programı da gelmektedir. Bu program ile hiç kod yazmadan tamamen sürükle bırak yöntemiyle çok güzel tasarımlar yapabilirsiniz. Projenizi açtığınızda gelen formun yanı sıra Designer programı ile oluşturdugunuz .ui uzantılı dosyadan istediğiniz kadar oluşturup projenize ekleyebilirsiniz. Ayrıca Qt ‘ yi kurduğunuzda Assistant adlı programı da beraberinde geliyor. Buradan Qt hakkında aradığınız her türlü bilgiye ve de Qt nin hazır fonksiyon ve classlarına ulaşabilirsiniz.Ayrıca Qt uygulamalarını farklı dillere çevirebilmek için Linguist adlı programda beraberinde gelmektedir.
Merhaba Dünya!
Buraya kadar Qt hakkında bilgi sahibi oldunuz. Şimdi gelin bir klasik olan “Merhaba Dünya” ile başlayalım:

1   #include
2   #include

3   int main(int argc, char *argv[])
4   {
5       QApplication app(argc, argv);
6       QLabel *label = new QLabel("Merhaba Dünya!");
7       label->show();
8       return app.exec();
9   }


Ekran görüntüsü şu şekilde olmaktadır:






 Şimdi satır satır açıklayalım:
1.ve 2. Satırda QApplication ve QLabel classlarını uygulamamıza dâhil ettik. Bir Qt uygulaması geliştireceğimiz için QApplication classını dâhil etmek zorundayız. Ayrıca uygulamada yaratacağımız label gibi tüm bileşenler için o bileşene ait classı da eklememiz gerekiyor.
3. satırda ne olduğunu zaten biliyor olmalısınız. Yine de söylemek gerekirse int argc, dışarıdan girilen parametre sayısını char *argv[] ise parametrelerin listesini tutan diziyi göstermektedir.
5. satırda bir Qt uygulaması oluşturuyoruz.
6. satırda bir label nesnesi oluşturuyoruz. Bu label sayesinde yazımız ekranda görünecektir. Qt de tüm bileşenler Q harfi ile başlamaktadır. QLabel, QPushButton, QCheckBox gibi…
7. satırda show() fonksiyonu ile label görünür hale geliyor.
Son satırda ise Qt uygulaması çalıştırılıyor.
Sinyal ve Yuvalar (Signals and Slots)
Sinyal ve slot yapısı Qt programlamanın temelini oluşturmaktadır. Çalışma zamanında herhangi bir olayın oluştuğu anda çalışmasını istediğimiz durumlarda bu yapıyı kullanırız. Şu anda biraz karışık gibi gelebilir ama örneklerle açıkladığımızda bu yapının ne kadar pratik ve de mantıklı olduğunu göreceksiniz. Örneğe geçmeden önce sinyal ve slotların özelliklerinden bahsetmek istiyorum.
Slotlar tipik bir C++ üye fonksiyonu gibidirler. Virtual, overloaded, public, protected ya da private olabilirler. Diğer üye fonksiyonlar gibi her tür parametre alabilirler. Slotların üye fonksiyonlardan tek farkı sinyale bağlı olmaları ve sinyalin tetiklemesi sonucunda fonksiyonu çalıştırmalarıdır.
Bir slota birden fazla sinyal bağlanabileceği gibi bir sinyale de birden fazla slot bağlanabilir.
Birden fazla sinyal de birbirine bağlanabilir. Bu durumda birinci sinyal oluştuğunda ikinci sinyal tetiklenecektir.
Bir slotun erişim hakları hangi sinyallerin o slota bağlanabileceği ile ölçülmektedir.
Sinyalleri slotlara bağlama işlemi QObject sınıfından türemiş olan connect() fonksiyoni ile yapılır.
connect() fonksiyonunun yapısı şu şekildedir:
connect(gönderici, SIGNAL(signal), alıcı, SLOT(slot));
Bu yapıyı incelediğimizde connect() yapısının gayet açık olduğunu görebiliriz. Gönderici parametresi olayın oluştuğu nesneyi söyler. SIGNAL içine yazılan signal ise ilk nesnenin sinyalidir. Sonra olayın etkileyeceği nesne(alıcı) yazılır. Son olarak ise hedef nesnesinin slotu SLOT() içine yazılır.
Şimdi basit bir örnekle sinyal slot yapısının kullanımına bakalım:
 
 1  #include 
 2  #include 
 
 3  int main(int argc, char *argv[])
 4  {
 5      QApplication app(argc, argv);
 6      QPushButton *button = new QPushButton("Quit");
 7      QObject::connect(button, SIGNAL(clicked()),
 8                      &app, SLOT(quit()));
 9      button->show();
10     return app.exec();
11  }


İlk örneğimizde programın genel yapısından bahsetmiştik. Burada                     connect(button, SIGNAL(clicked()), &app, SLOT(quit()));     yapısını inceleyelim. Burada butona basıldığında sinyal tetiklenir ve uygulama sonlandırılır.
SLOT() içerisinde bu örnekte olduğu gibi hazır fonksiyonlar(quit()) kullanabileceğimiz gibi kendi yazdığımız fonksiyonları da kullanabiliriz. Sizce de bu yapı gayet pratik ve mantıklı öyle değil mi?
Bu makalede sizlere Qt’ yi tanıtmaya çalıştım. Aynı zamanda http://trolltech.com/  adresinden de Qt hakkında detaylı bilgi alabilirisiniz ve Qt’ nin en güncel paketlerine erişebilirisiniz.
Yukarıda bahsettiğim özelliklerinden de anlaşıldığı gibi Qt, özellikle de görsel uygulamalar geliştirmek isteyenler için gayet güzel ve etkili bir araç. Platformdan bağımsız olması ve birçok programlama diline destek vermesi açısından da bakıldığında çok geniş kitleye hitap ettiğini söyleyebiliriz.

1 yorum:

soneday dedi ki...

Ben bunu Symbian için kullanıyorum,gerçekten çok süper birşey :)
www.soneday.com

Yorum Gönder