Basic Qt Programming Tutorial/tr
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
Türkçe English 简体中文 فارسی Español
Giriş
Bu ders Qt-Creator tümleşik geliştirme ortamı (IDE (Integrated Development Environment)) kullanarak pragramlama için ilk adımları ayrıntılı olarak açıklamaktadır.
Not: Bu ders sadece Qt'ye yeni başlayanlar için bir giriş niteliğindedir.
Ot ile grafik kullanıcı arayüzü (GUI (Graphical User Interface)) hazırlamak oldukça kolaydır. Aynı zamanda hazırdadığınız arayüzler birçok platformda sorunsuz çalışmaktadır. Programlamaya başlamadan önce aşağıdakilerin sisteminizde kurulu olması gerekmektedir.
- Qt Creator (Yaygın tüm platformlarda kullanabilirsiniz. Windows, Linux, Mac os)
- Qt Libraries 4.8.3 for windows (Windows için ikili paketi)
Kurulum Dosyalarını Buradan indirebilirsiniz. —> http://qt.io/download Kurulumun nasıl yapıldığıyla ilgili bu sayfadan bilgi alabilirsiniz.
Not: Diğer işletim sistemleri üzerinde kullanmak isteyen arkadaşlarda aynı şekilde ilgili paketleri indirdikten sonra kullanmaya başlayabilir. Aynı zamanda Windows işletim sistemi üzerinde Visual Studio kullanılarakta geliştirme yapılabilir. Visual Studio kullanacak arkadaşlar Qt Libraries 4.8.3 veya başka bir sürümünü indirdikten sonra Qt Visual Studio Add-in eklentisini kurarak Visual Studio üzerinde geliştirme yapabilir.
İlk Adım : Yeni Bir Proje Oluşturma
- Qt Creator Başlatın
- Sırasıyla File - New File or Project - Applications - Qt Gui Application seçtikten sonra Choose butonuna tıklayınız.
- Açılan ekranda Name: karşısına proje için bir isim verdikte sonra Create in: karşısına projenin dizinini seçerek Next'e tıklayınız.
- Qt ile hangi platformlara derleme yapılacağını soran bu ekranda Desktop seçerek masaüstüne derleme yapacağımızı bildirerek Next butonuna tıklıyoruz.
- Açılan ekrandan Base Class yazan kısımdan hangi sınıftan türetme yapacağımızı şeçiyoruz. QMainWindow seçerek uygulamamız için bir anapencere oluşturmasını bununla birlikte bir başlık dosyası ve kaynak dosyası ile birlikte tasarım yapacağımız .ui uzantılı dosyayı oluşturmasını söylüyoruz. Next Butonuna tıklıyoruz.
- Bu son dialog penceresinde ise eğer bir version kontrol sistemi kullanıyorsak Add toversion control: kısmından bunu seçebiliriz. Şu an none seçili kalacaktır. Son olarak Finish butonuna tıklayarak projemi oluşturuyoruz.
Proje açıldıktan sonra 4 adet dosya oluşacaktır. Bunlar:
- main.cpp
- mainwindow.h
- mainwindow.cpp
- mainwindow.ui
İkinci Adım : Proje Dosyalarına Gözatma
- main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Yukarıda bulunan main fonksiyonu programın başlangıç fonksiyonudur. Main fonksiyonu içerisinde bir adet QApplication nesnesi oluşturuyoruz, Qt ile uygulamamızı çalıştırmak için tüm programlarda bu nesne oluşturulmak zorundadır, bu nesne programımız için arkaplanda bir döngü oluşturarak programımızın sürekli ekranda kalmasını sağlıyor. Daha sonra yaptığımız arayüzden bir nesne oluşturuyoruzki bu nesne bizim ana ekranımız yani QMainWindow sınıfından türetme yaptığımız sınıfın bir örneğini oluşturuyoruz. w.show(); fonksiyonunu çalıştırarak ekranda gözükmesini sağlıyoruz. return a.exec(); fonksiyonu ile uygulamayı QApplication'a devrediyoruz.
- mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Burası ana penceremizin başlık dosyasıdır. Q_OBJECT makrosu Qt içerisinde bulunan sinyal slot mekanızmasını kullanmak için eklenen bir makrodur. Bu konu ileride anlatılacaktır. *explicit MainWindow(QWidget parent = 0); burası sınıfın yapıcı fonksiyonu, *QWidget parent = 0 diyerek sınıfımızın başka bir sınıfa veyahut widgette diyebiliriz ait olmadığını belirtir, ileride görecemiz gibi bir nesne başka bir nesneye ait olabilmektedir. ~MainWindow(); burası yıkıcı fonksiyonumuz. private kısımda bulunan *Ui::MainWindow ui; designer ekranında oluşturduğumuz arayüze bir gösterici tanımlamaktadır.
- mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
Burası projemizin kaynak dosyası, başlık dosyamızda tanımlanan fonksiyonların içerikleridir. ui->setupUi(this); fonksiyonu #include "ui_mainwindow.h" olarak eklediğimiz dosya içerinde Qt Creator tarafından oluşturulan otomatik bir fonksiyondur. Qt ile hazırladığımız arayüzler .ui dosyalarında xml yapısı kullanılarak tutulur. Projeji derlediğimizde MOC (Meta Object Compiler) tarafından bunlar kaynak koda çevrilirler işte bu kaynak kod ui_mainwindow.h dosyasının ta kendisidir. Bunun içeriğini görebilmek için en az bir kez derleme yapmalıyızki MOC tarafından kodları oluşturulsun.
- mainwindow.ui
Bu dosyanın içeriği aşağıdaki gibi bir xml yapı içerisindedir. Bunlarda genellikle üzerinde değişiklik yapılmaz bu dosya sadece ekran üzerinde bulunan nesnelerin konum bilgileri vs. gösterir. Programın çalışma anına ilişkin bir dosya değildir. Derleyicinin gördüğü asıl dosya üretilen ui_mainwindow.h dosyasının içeriğidir.
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
Üçüncü Adım : Proje Dosyalarını Düzenleme
Proje üzerine bir adet yazı gösteren bileşen ve bir adet tıklama ögesi yani buton eklenmek istenmektedir. Bu 2 bileşene widget denilmektektedir. Qt üzerinde kullanacağınız tüm arayüz nesneleri widget olarak adlandırılır. Birçok widget hazır olarak kurulu gelmiş olsada kendinizde bir widget ekleyebilirsiniz, lakin bunlar biraz ileri seviye konular olduğu için bu kısımda anlatılmayacaktır.
mainwindow.ui dosyasına çift tıkladığınızda bir designer penceri açılacak, orta kısımda üzerinde çalıştığımız form nesnesi bulunmaktadır.(MainWindow Arayüzü). sol tarafta ise form üzerinde kullanacağımız widgetler bulunur. Sol taraftan bir adet QLabel ve QPushButton widgetini sürükleyerek form üzerine bırakınız.
Dördüncü Adım : Proje Derleme ve Çalıştırma
Projeyi kaydettikten sonra Build menüsünden Build Project seçerek veya Ctrl + B tuş kombinasyonunu kullanarak derleyebilirsiniz. Veya Derlemek ve sonrasında çalıştırmak için Build menüsünden Run seçerek veya Ctrl + R tuş kombinasyonunu kullanarak hem derleyip hem çalıştırabilirsiniz.