You are on page 1of 4

QT Eitimi - 1 : Merhaba Dnya

nder Arslan <onder@xcoders.net>


Srm 1.0

zet Bu belge qt renimi iin bir dizi eklinde hazrlanmtr. C++ bilmek n kouldur. Giri Byle bir yaz yazma fikri qt asistan (qtassistant) 'nda bulunan eitimler (tutorial) 'e alrken ortaya kt. Olduka iyi hazrlanm bu eitimlere benzer Trke belgeler dizisi hazrlamann yararl olacan dndm. ncelikle bu eitimlerdeki rnekleri kullacaktm ama Kaya Ouz 'un trolltech ile yazmasndan sonra bu belgeleri kullanmaya izin verilmediini renmi olduk. Bu sebeple belgeler kendine zg olacak. Bakarsnz benim rneklerim ve anlatmm daha gzel olur :) QT her ne kadar python ve ruby ile kullanlabilsede ben rneklerimde C++ kullanacam. Bunun ok nemli bir nedeni var. Python ve ruby bilmiyorum :) . Sanrm bu yeterli bir sebep , bu nedenle ileride de benden baka bir dilde rnek gremeyeceksiniz. Ayrca unu belirtmekte yarar var bu yaz dizisi ben qt 'de ilerledike ilerleyecek bir yaz dizisi. Bu nedenle kodlardaki aklamalarm sca scana ve bir aceminin bak asndan olacak. Kodlar yazarken hata yaptm yerleri zellikle belirteceim. Bylece sizde ayn hatalar yapmak durumunda kalmayacaksnz. Merhaba Dnya Qt Eitimini -1 'in ilk program doal olarak "Merhaba Dnya" olacak. Klasik olarak her yeni dil renildiinde yazlan bu programn Brian W. Kernighan and Dennis M. Ritchie (K&R) 'nin yazd The C Programming Language 'kitabndan itibaren kullanldn biliyorum. Bizde adeti bozmayacaz ama biraz farkl yazacaz : /*--- 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 balk (header) dosyamza include n ilemci komutuyla kullanacamz Q class 'lar dahil ediyoruz. Yazm genel olarak bilinen kontrollerin bana Q harfi getirilmi hali diyebiliriz. Burada QPushButton, QWidget, QMessageBox kullanacamz iin yalnzca n dahil ettik. Pencere isimli snf (class) 'mz QWidget'ten public olarak tretiyoruz (inheritance ). QWidget btn arayz nesnelerinin tretildii temel snftr ve sistemden gelen fare, klavye ve dier olaylar tar. Snf blounda ilk olarak yazdmz Q_OBJECT snf tanmnz ierisinde kendi SIGNAL ve SLOT 'larnz tanmlarsanz kullanmanz gereken bir macrodur. Public eriim blgesinde QPushButton iin bir gsterici, snfmz iin bir yapc(constructer) ve bir ykc (destructer) tanmlyoruz. public slots blmnde ise arayzmzde bir olay(event) olmas durumunda alacak fonksiyonu yazyoruz (Q_OBJECT i bu nedenle eklemitik.). Burada biz mouse pushbutton 'a tklad zaman alacak fonksiyonumuz fnctiklama fonksiyonudur. Fonksiyon "Merhaba Dunya" yazan bir QMessageBox oluturuyor. /*--- 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 yapc ve ykc metodlarn tanmlamalarn yapyoruz. lk olarak Pencere'nin setFixedSize 'a srasyla genilik ve ykseklik deerlerini geerek penceremizin boyutlarn ayarlyoruz. Daha sonra zerinde tkla yazan bir button oluturup setGeometry fonksiyonu ile srasyla konum(x, y) ve boyut(w, h) bilgilerini giriyoruz. connect ile button 'un clicked() olay iin snfmzn fncTiklama()

fonksiyonunun almasn salyoruz. /*--- 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 snfn dahil ediyoruz. Bu snfn bir ok grevi var ve imdilik programmz balang durumuna getirme (initialize) ve sonlandrma (finalization) ilemlerini gerekletirdiini bilmemiz yeterli ;) Hemen bir QApplication nesnesi tanmlyoruz ve birde tanmladmz Pencere nesnesinden ;) sonra show() fonksiyonu ile penceremizi grnr yapyoruz. ve return ile exec() fonksiyonun geri dn deerini dndryoruz. Hepsi bu ;) Derleme ve altrma

Yazdnz .h ve .cpp uzantl dosyalar merhaba adnda bir klasr iine kaydedin ve konsoldan srasyla aadaki komutlar verin: qmake-qt4 -project qmake-qt4 make ./merhaba

Bu admlardan sonra aadaki grnt ile karlam olmanz lazm ;)

Son Sz Burada birka ayrnty belirtmem lazm nk beni olduka uratrd. Birincisi eer snf bildirimlerini (decleration) yukardaki gibi balk dosyasnda yapmayacaksanz uygun moc dosyasn .cpp dosyasnda bir yere yazmanz lazm. rnein yukardaki kodlarn hepsini main.cpp de altrmak istediinizi varsayarsak snf bildiriminin altnda #include "main.moc" yazmassanz make komutunda hata alabilirsiniz ;) Ben aldm ordan biliyorum :) kinci bir nokta ise qt cross platform ben bu kodlar windows

'ta altracam gibi bir dncede iseniz -ki byle dnmemekte fayda var- komut satrndan qmake -project, qmake, make lsn altrn(-qt4 eklemeyin). Birde normal dos ekrann amak yerine "Balat -> Programlar ->Qt by TrollTech v.4.1.4 (opensource) -> Qt 4.1.4 Command Prompt" ile alan dos ekrannda derlemenizi yapn, aksi halde make komutunu bulamyor (En azndan ben denedim bende bulamad path ayarlarn yapmama ramen).

Telif Hakk ve Lisans Bu belgenin, QT Eitimi - 1 : Merhaba Dnya , 1.0 srmnn telif hakk 2006 nder ARSLAN'a aittir. Bu belgeyi, Free Software Foundation tarafndan yaynlanm bulunan GNU zgr Belgeleme Lisansnn 1.1 ya da daha sonraki srmnn koullarna bal kalarak kopyalayabilir, databilir ve/veya deitirebilirsiniz. Bu Lisansn bir kopyasn http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz. Linux, Linus Torvalds adna kaytl bir ticar isimdir. Qt, TrollTech adna kaytl bir ticari isimdir. Feragatname Bu belgedeki bilgilerin kullanmndan doacak sorumluluklar, ve olas zararlardan belge yazar sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluu uygulayana aittir. Tm telif haklar aksi zellikle belirtilmedii srece sahibine aittir. Belge iinde geen herhangi bir terim bir ticar isim ya da kuruma itibar kazandrma olarak alglanmamaldr. Bir rn ya da markann kullanlm olmas ona onay verildii anlamnda grlmemelidir.

You might also like