QT Eğitimi - 1 : Merhaba Dünya
Sürüm 1.0
Özet
Bu belge qt öğrenimi için bir dizi şeklinde hazırlanmıştır. C++ bilmek ön koşuldur.
Giriş
Böyle bir yazı yazma fikri qt
asistanı (qtassistant) 'nda bulunan eğitimler
(tutorial) 'e çalışırken ortaya çıktı. Oldukça iyi
hazırlanmış bu eğitimlere benzer Türkçe belgeler dizisi hazırlamanın
yararlı olacağını düşündüm. Öncelikle bu
eğitimlerdeki örnekleri kullacaktım ama Kaya Oğuz 'un trolltech ile yazışmasından sonra bu belgeleri kullanmaya
izin verilmediğini öğrenmiş olduk. Bu sebeple belgeler kendine
özgü olacak. Bakarsınız benim örneklerim ve anlatımım
daha güzel olur :)
QT her ne kadar python ve ruby ile kullanılabilsede ben
örneklerimde C++ ı kullanacağım. Bunun çok
önemli bir nedeni var. Python ve ruby bilmiyorum :) . Sanırım bu
yeterli bir sebep , bu nedenle ileride de benden başka bir dilde
örnek
göremeyeceksiniz.
Ayrıca şunu belirtmekte yarar var bu yazı dizisi ben qt 'de
ilerledikçe ilerleyecek bir yazı dizisi. Bu nedenle kodlardaki
açıklamalarım sıcağı sıcağına ve bir aceminin bakış açısından olacak. Kodları
yazarken hata yaptığım yerleri özellikle belirteceğim.
Böylece sizde aynı hataları yapmak durumunda kalmayacaksınız.
Merhaba Dünya
Qt Eğitimini -1 'in ilk programı doğal olarak "Merhaba Dünya"
olacak. Klasik olarak her yeni dil öğrenildiğinde yazılan bu
programın
Brian W. Kernighan
and
Dennis M. Ritchie
(K&R)
'nin yazdığı The C Programming Language 'kitabından itibaren
kullanıldığını biliyorum. Bizde adeti bozmayacağız ama biraz farklı
yazacağız :
/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H
#include <QPushButton>
#include <QWidget>
#include <QMessageBox>
class Pencere : public QWidget
{
Q_OBJECT
public:
QPushButton *btn;
Pencere();
~Pencere();
public slots:
void fncTiklama()
{
QMessageBox::information(this, "Mesaj", "Merhaba
Dunya");
}
};
#endif |
Pencere.h:
İlk olarak başlık (header) dosyamıza include ön işlemci
komutuyla kullanacağımız Q class 'ları dahil ediyoruz. Yazımı genel
olarak bilinen kontrollerin başına Q harfi getirilmiş hali diyebiliriz. Burada
QPushButton, QWidget, QMessageBox kullanacağımız için yalnızca
üçünü dahil ettik. Pencere isimli sınıf
(class) 'ımızı QWidget'ten
public olarak türetiyoruz (inheritance ). QWidget
bütün arayüz nesnelerinin türetildiği
temel
sınıftır ve sistemden gelen fare, klavye ve diğer olayları taşır. Sınıf
bloğunda ilk olarak yazdığımız Q_OBJECT sınıf tanımınız içerisinde kendi SIGNAL ve SLOT
'larınızı tanımlarsanız kullanmanız gereken bir macrodur. Public erişim
bölgesinde QPushButton için bir gösterici, sınıfımız için bir yapıcı(constructer) ve bir yıkıcı
(destructer) tanımlıyoruz. public slots bölümünde ise
arayüzümüzde bir olay(event) olması durumunda
çalışacak fonksiyonu yazıyoruz (Q_OBJECT i bu nedenle
eklemiştik.). Burada biz mouse pushbutton 'a tıkladığı zaman
çalışacak fonksiyonumuz fnctiklama fonksiyonudur.
Fonksiyon "Merhaba Dunya" yazan bir QMessageBox oluşturuyor.
/*--- Pencere.cpp ---*/
#include "Pencere.h"
Pencere::Pencere()
{
setFixedSize(150,100);
btn = new QPushButton("tikla", this);
btn->setGeometry(50,30,50,30);
connect(btn,SIGNAL(clicked()),this,SLOT(fncTiklama()));
}
Pencere::~Pencere()
{
delete btn;
} |
Pencere.cpp
Bu dosyada yapıcı ve yıkıcı metodların tanımlamalarını yapıyoruz. İlk olarak Pencere'nin setFixedSize
'a sırasıyla genişlik ve yükseklik değerlerini geçerek
penceremizin boyutlarını ayarlıyoruz. Daha sonra üzerinde tıkla
yazan bir button oluşturup setGeometry fonksiyonu ile sırasıyla konum(x, y) ve boyut(w, h) bilgilerini giriyoruz. connect ile button 'un clicked() olayı için sınıfımızın fncTiklama() fonksiyonunun çalışmasını sağlıyoruz.
/*--- main.cpp ---*/
#include "Pencere.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app (argc,argv);
Pencere pencere;
pencere.show();
return app.exec();
} |
main.cpp
İlk olarak QApplication
sınıfını dahil ediyoruz. Bu sınıfın bir çok görevi var ve
şimdilik programımızı başlangıç durumuna getirme (initialize) ve
sonlandırma (finalization) işlemlerini gerçekleştirdiğini
bilmemiz yeterli ;) Hemen bir QApplication nesnesi tanımlıyoruz ve
birde tanımladığımız Pencere nesnesinden ;) sonra show() fonksiyonu ile penceremizi görünür yapıyoruz. ve return ile exec() fonksiyonun geri dönüş değerini döndürüyoruz. Hepsi bu ;)
Derleme ve Çalıştırma
Yazdığınız .h ve .cpp
uzantılı dosyaları merhaba adında bir klasör içine kaydedin
ve konsoldan sırasıyla aşağıdaki komutları verin:
qmake-qt4 -project
qmake-qt4
make
./merhaba |
Bu adımlardan sonra aşağıdaki görüntü ile karşılaşmış olmanız lazım ;)

Son Söz
Burada
birkaç ayrıntıyı belirtmem lazım çünkü beni
oldukça uğraştırdı. Birincisi eğer sınıf bildirimlerini
(decleration) yukarıdaki gibi başlık dosyasında yapmayacaksanız uygun
moc dosyasını .cpp dosyasında bir yere yazmanız lazım.
Örneğin yukarıdaki kodların hepsini main.cpp de çalıştırmak
istediğinizi varsayarsak sınıf bildiriminin altında #include "main.moc"
yazmassanız make komutunda hata alabilirsiniz ;) Ben aldım ordan
biliyorum :) İkinci bir nokta ise qt cross platform ben bu kodları
windows 'ta çalıştıracağım gibi bir düşüncede
iseniz -ki böyle düşünmemekte fayda var- komut
satırından qmake -project, qmake, make
üçlüsünü çalıştırın(-qt4 eklemeyin).
Birde normal dos ekranını açmak yerine "Başlat -> Programlar
->Qt by TrollTech v.4.1.4 (opensource) -> Qt 4.1.4 Command
Prompt" ile açılan dos ekranında derlemenizi yapın, aksi halde
make komutunu bulamıyor (En azından ben denedim bende bulamadı path
ayarlarını yapmama rağmen).
-
-
Telif Hakkı ve Lisans
-
Bu belgenin, QT Eğitimi - 1 : Merhaba Dünya ,
1.0 sürümünün
telif hakkı © 2006 Önder ARSLAN'a
aittir. Bu belgeyi, Free Software Foundation tarafından yayınlanmış
bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün
koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya
değiştirebilirsiniz. Bu Lisansın bir kopyasını
http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.
Linux, Linus Torvalds adına kayıtlı bir ticarî isimdir.
-
- Qt, TrollTech adına kayıtlı bir ticari isimdir.
- Feragatname
- Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar,
ve olası zararlardan belge yazarı sorumlu tutulamaz.
Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir.
-
Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine
aittir. Belge içinde geçen herhangi bir terim bir ticarî isim
ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün
ya da markanın kullanılmış olması ona onay verildiği anlamında
görülmemelidir.