Kategoriler: Eğitim

Qt ile C++ GUI Programlamaya Giriş

Şimdi ilk olarak çok basit bir program yapmakla başlayabiliriz. Bu programı çalıştırdığımızda sayfada “Merhaba QT” yazan bir pencere açılacaktır. Önce onu satır satır inceleyeceğiz ve sonra nasıl derleyip çalıştıracağımızı öğreneceğiz. Dilerseniz ilk programımızı yapmaya başlayalım. Programı yapmaya başlamadan önce bilgisayara QT programı yüklü olması gerektiğini anlatmam gerekiyor fakat ilk program olduğu için konunun biraz mantığını anlamanız için bu örnekten sonra indirme linklerini ve kurulum işlemleri için gerekli dosyaları altta bulabilirsiniz.

#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();}

Satır 1 ve 2 QApplication ve QLabel sınıflarının tanımlarını programa dahil eder. Her QT sınıfı için, o sınıfın tanımını içeren ve onunla aynı isimde olan bir başlık dosyası vardır.

Satır 5 uygulama kaynaklarını yönetmek için bir QApplication nesnesi oluşturur. QApplication’ un kurucusu argc ve argv argümanlarını ister, çünkü QT kendine ait birkaç komut-satırı argümanını (command-line argument) destekler.

Satır 6 “Merhaba QT!” u görüntüleyen bir QLabel parçacığı(widget) oluşturur. QT ve Unix terminolojisinde, bir parçacık kullanıcı arayüzünde görsel bir öğedir. Bu terimin kaynağı “window gadget”tir ve bu terim Windows terminolojisindeki “control” ve “container” ile aynı anlamdadır. Butonlar(button), menüler(menu), kaydırma çubukları(scroll bar) ve çerçeveler(frame) parçacığa birer örnektirler. Parçacıklar başka parçacıklar içerebilirler; örneğin, bir uygulama penceresi genellikle bir QMenuBar, birkaç QToolBar, bir QStatusBar, ve bazı diğer parçacıkları içeren bir parçacıktır. Çoğu uygulama, uygulama penceresi olarak bir QMainWindow veya bir QDialog kullanır, fakat Qt oldukça esnektir, böylece herhangi bir parçacık pencere olarak kullanılabilir. Örneğimizde, QLabel parçacığı uygulama penceremizdir.

Satır 7 etiketi(label) görünür yapar. Parçacıklar her zaman gizlenmiş olarak oluşturulurlar, böylece onları göstermeden önce isteğimize göre uyarlayabiliriz.

Satır 8’de uygulamanın kontrolü QT’ a geçer. Bu noktada, program olay döngüsüne(event loop) girer. Bu, programın bir kullanıcı eylemi için beklediği (fare tıkladığında veya bir tuşa basmak gibi) bir tür QT 5.7 ile C++ GUI Programlama 10 bekleme(stand-by) modudur. Kullanıcı eylemleri, programın cevaplayabildiği olayları(“mesajlar” diye de geçer) üretir ve bunlar genellikle bir ya da daha fazla fonksiyonun yürütülmesidir. Örneğin, kullanıcı bir parçacığı tıkladığında, bir “fare butonuna basılma(mouse press)” ve bir “fare serbest(mouse release)” olayları üretilir. Bu açıdan GUI uygulamaları, genellikle girdi işleyen, sonuçlar üreten ve bir insan müdahalesi olmadan sonlandırılan geleneksel toplu iş programlarından(batch programs) büyük ölçüde farklıdırlar.

Sadelik olsun diye, main() fonksiyonunun sonunda QLabel nesnesi için delete’i çağırmadık. Bu bellek sızıntısı(memory leak) bunun gibi küçük bir program söz konusu olduğunda zararsızdır. Program sonlandırıldığında QLabel nesnesi için ayrılmış olan bellek işletim sistemi tarafından geri alınacaktır.

Artık programı kendi makinenizde deneyebilirsiniz. Şekil 1.1’deki gibi görünmelidir. Ondan önce, eğer makinenizde Qt yüklü değilse, Qt 4.3.2 veya daha yeni bir sürümünü bilgisayarınıza yüklemelisiniz. (İşletim sisteminize uygun bir Qt 5.7 kopyasını QT-project.org adresinden temin edebilirsiniz.) Bundan sonrası için, QT 5.7’ nin bir kopyasını doğru olarak makinenize yüklediğinizi varsayacağım. Ayrıca program kodlarının içinde olduğu hello.cpp adlı dosyanın hello adlı bir dizinin altında olması gerekir.

Bir komut isteminden (command prompt) dizini hello‘ ya ayarlayın ve platformdan bağımsız proje dosyasını (hello.pro) oluşturmak için aşağıdakini yazın:

qmake -project

Proje dosyasından, platforma özgü bir makefile oluşturmak için aşağıdakini yazın:

qmake hello.pro

Şimdi, programı derlemek için make, ardından da programı çalıştırmak için hello yazın. Bir sonraki örneğimize geçmeden önce biraz eğlenelim: Şu satırı

QLabel *label = new QLabel("Merhaba Qt!");

şu kod parçası ile değiştirelim

QLabel *label = new QLabel("<h2><i>Hello </i> "
 "<font color=red>Qt!</font></h2>");

ve yine aynı adımları izleyerek programı derleyip çalıştıralım. Uygulamamız çalıştığında Şekil 1.2’ deki gibi görünecektir. Bu örneğin de gösterdiği gibi, bir QT uygulamasının kullanıcı arayüzüne daha hoş bir hava katmak, basit HTML etiketleri(tag) kullanarak bile mümkün.

ve yine aynı adımları izleyerek programı derleyip çalıştıralım. Uygulamamız çalıştığında Şekil 1.2’deki gibi görünecektir. Bu örneğin de gösterdiği gibi, bir QT uygulamasının kullanıcı arayüzüne daha hoş bir hava katmak, basit HTML etiketleri (tag) kullanarak bile mümkün.

Değerli ziyaretçi QT Programlamaya Giriş başlıklı yazımda ilginizi çekebilir. Değerli fikirleriniz için yorum yapmanızı bekliyorum.

Leave a Comment
Paylaş
Yayınlayan:
Abdulkadir Turan

Recent Posts

Julia Tam Sayılar ve Kesirli Sayılır (Floating-Point Numbers)

Julia programlama dilinde tamsayılar (Integer) ve kesirli değerleri (Floating-Point Numbers), aritmetik ve hesaplamanın temel yapı…

4 ay önce

Julia Değişkenler

Bu yazıda Julia programlama dilinde değişkenleri tanımlamayı anlattım. Julia'da değişkenler diğer dillerdeki yapılara çok benziyor.…

6 ay önce

R Shiny Nedir?

Shiny, R'da etkileşimli web uygulamaları yapmanızı sağlayan bir R Studio projesidir. Shiny projesi ile R'da…

7 ay önce

Firma Ortağım ile Firmalarınızı Google’da Üst Sıralara Çıkarın

Firma Ortağım projesi Türkiye’de faaliyet gösteren büyük ve küçük tüm işletmeleri hedef alan yerli bir girişimdir.…

12 ay önce

Veridyen NS (Name Server) Adresleri

Merhabalar Türkiye'de kaliteli hizmet veren nadir firmalardan biri olan Veridyen ile çalışırken NS (Nameserver) adreslerini…

1 sene önce

Matematiksel İstatistik Ders Notları

Karadeniz Teknik Üniversitesi İstatistik ve Bilgisayar Bilimleri bölümünde ikinci sınıfta aldığımız Matematiksel İstatistik dersine ait ders…

1 sene önce