Qt ve C++ ile Combobox İşlemleri

Batuhan Düzgün tarafından yayınlanmıştır 29. August 2010 07:39

Herkese merhaba arkadaşlar bu yazımda sizlere Qt Creator’ı kullanarak,Combobox işlemlerinden bahsedeceğim.Bunları yaparken Qt’nin en önemli  kavramı ve yapısı  Yuva ve Sinyallerden bahsedeceğim.İlk iş olarak Qt Creator’ı açıyoruz.

Ardından GUI projesi açıyoruz.Aman dikkat projenin oluşturulduğu dosya yolunun sonunda “\qt” gözüküyorsa lütfen silin.Yoksa bir türlü çalışmıyor diye dövünüp durursunuz. : ) Projemizi açtık sanırsam.Proje ismine “Qt_AcilirMenu” diye belirttim.

Aşağıdaki gözüken paneli görmüş olmanız gerekiyor.
 
 
 

Görüldüğü gibi bize bir form,bir başlık dosyası ve 2 tane de kaynak kod sayfası açtı Qt Creator’ımız.Gerçekten cömert davranış.Şimdi ilk iş olarak hemen “Headers” klasörü altındaki başlık dosyasına tıklayalım.Buraya yazacağımız kodlarda genellikle kendi yazacağımız sinyal fonksiyonları ve kendi slot fonksiyonlarımız yer alır.Ne demek slot ve sinyal?

Arkadaşlar,sinyal ve slot kavramı aslında Java veya C# ile GUI programlama yapmış olanlar için tanıdık sayılır.Sinyal dediğimiz olay,aslında bir olay (event)  fonksiyonu gibi bir şey.Nasıl ki butonun tıklama olayı var.Qt ‘de ise tıklama olayına tıklama sinyali diyorlar.slot kendisine bağlı olan sinyal tetiklendiğinde işletilecek olan fonksiyon.Yapı basit.

Sinyaller tetikleme olayları,slotlar ise sinyaller tetiklendiğinde yapılacak olan fonksiyonlar kod satırları.Şimdi bunları yapacağımız örnekte daha net anlayacağız.
 

“Acilirmenu_islem.h”  Kod Sayfası …

#ifndef ACILIRMENU_ISLEM_H

#define ACILIRMENU_ISLEM_H

#include <QMainWindow>

namespace Ui {

   class AcilirMenu_Islem;

}

class AcilirMenu_Islem : public QMainWindow

{

   Q_OBJECT

public:

   explicit AcilirMenu_Islem(QWidget *parent = 0);

   ~AcilirMenu_Islem();

private slots:

   void Comboboxa_Ekle();

   void SeciliElemaniGoster();

private:

   Ui::AcilirMenu_Islem *ui;

};

#endif // ACILIRMENU_ISLEM_H
 

Başlık dosyamız için yukarıda görülen kodlar yer alacak.Şimdi bunları açıklayalım.”QMainWindow”, ana penceremiz görseluygulamızı barındıran çerçeve gibi düşünün.Yani boş bir form penceresikısaca.Qt ile C++ programlama yaparken her görsel bileşenin başlık dosyasınıkullandığınız kod sayfasında eklemeniz lazım.Bize include deyimi ile başlıkdosyasını ekledik.Ardında bildiğimiz class yapısı var.Yalnız Q_Object nesnesi önemli bu nesne sinyal veya sınıf barındıran sınıflarda mutlaka bulunmalı.

İşte istediğimiz yer burası “private slots” satırının altında kalan fonksiyon imzaları bizim slotlarımız.Çokta hoş gözüküyorlar. : ) Başlık dosyasıyla işimiz bu kadar slotlarımızı yazdık.Peki hani sinyaller derseniz.Yapacağımız uygulamada kendi sinyallerimizi yazmamıza gerek yok zaten başlık dosyası içinde yer alan  “AcilirMenu_Islem” adlı sınıfımız (class) QMainWindow ‘dan kalıtım almış.O yüzden form üzerindeki her türlü tıklama veya tetikleme sinyallerini kullanma imkanımız var.Ama kendi sinyallerimizi yazamaz mıyız derseniz kesinlikle de yazabilirsiniz.Hemen kaynak kod dosyalarına geçiyorum.
 

“acilirmenu_islem.cpp”  Kod Sayfası …

#include "acilirmenu_islem.h"
#include "ui_acilirmenu_islem.h"
AcilirMenu_Islem::AcilirMenu_Islem(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::AcilirMenu_Islem)
{
    ui->setupUi(this);
    connect(AcilirMenu_Islem::ui->ilcebutonu,SIGNAL(clicked()),
                             this,SLOT(Comboboxa_Ekle()));
    connect(AcilirMenu_Islem::ui->ilcelercombobox,SIGNAL(activated(QString)),
                             this,SLOT(SeciliElemaniGoster()));
}
AcilirMenu_Islem::~AcilirMenu_Islem()
{
    delete ui;
}
void AcilirMenu_Islem::Comboboxa_Ekle()
{
    QString IlceAdi=AcilirMenu_Islem::ui->ilceeditline->text();
    AcilirMenu_Islem::ui->ilcelercombobox->addItem(IlceAdi);
    AcilirMenu_Islem::ui->ilceeditline->clear();
}
void AcilirMenu_Islem::SeciliElemaniGoster()
{
    QLabel *Goster=new QLabel(AcilirMenu_Islem::ui->ilcelercombobox->currentText());
    Goster->sizeHint().setHeight(300);
    Goster->sizeHint().setWidth(300);
    Goster->show();
}
 

Bu kod sayfasına önceden hazırlamış olduğumuz başlık dosyamızı include ile ekledik.Yukarıda mevcut.

ui->setupUi(this);    komutuyladiyoruz ki bana vermiş olduğun görsel arayüzü kullanacağım.Hiçbir değişiklik yapmadan eklediğimiz kodlara bakalım.Yaptığımız iki önemli işlem var bunlardan ilki sinyal ve slotları birbirine bağlamak.Bunu da “connect”  ifadesiyle yapıyoruz.

Bu satırı biraz inceleyelim.Yazdığım kodla diyorum ki ,projemin görsel  arayüzünde bulunan “ilcebutonu” adlı QPushButton tipinden bileşenine eğer tıklama yapılırsa,“clicked()”  sinyalini yay ve bu sinyal ile  Comboboxa_Ekle() slot’unu  işlet.Yani  “ilcebutonu“ bileşenin clicked() sinyali ile Comboboxa_Ekle() slotunu bağla.Eğer tıklama sinyali yayılırsa,hemen ardından belirttiğim slot’u çalıştır.İşlem bu kadar arkadaşlar.Burada istersek bir close sinyalini belirttiğimiz slot’a yani fonksiyona bağlayabilirdik.Veya bir sinyale birden çok slot’ta bağlayabilirdik.Terside mümkün tabiî ki.

connect(AcilirMenu_Islem::ui->ilcebutonu,SIGNAL(clicked()),this,SLOT(Comboboxa_Ekle()));

Bu satır ile butona tıklamayapıldığı zaman Comboboxa_Ekle()  slotunu çalıştır,anlamına geliyor.

connect(AcilirMenu_Islem::ui->ilcelercombobox,SIGNAL(activated(QString)),this,SLOT(SeciliElemaniGoster()));

 

Bu seferde form üzerinde bulunan ”ilcelercombobox” adlı  QCombobox’ın herhangi bir elemanınatıklanırsa, SeciliElemaniGoster() adlı slotu çalıştır,anlamına geliyor.

Sanırsam slot ve sinyal kavramı anlaşıldı.Bence çok geçerli bir çözüm olmuş.

Ardından başlık dosyası içinde belirttiğimiz slotların kodlarını yazalım.

void AcilirMenu_Islem::Comboboxa_Ekle()
{
    QString IlceAdi=AcilirMenu_Islem::ui->ilceeditline->text();
    AcilirMenu_Islem::ui->ilcelercombobox->addItem(IlceAdi);
    AcilirMenu_Islem::ui->ilceeditline->clear();
}
 
void AcilirMenu_Islem::SeciliElemaniGoster()
{
    QLabel *Goster=new QLabel(AcilirMenu_Islem::ui->ilcelercombobox->currentText());
    Goster->sizeHint().setHeight(300);
    Goster->sizeHint().setWidth(300);
    Goster->show();
}

 

“Comboboxa_Ekle”  adlı  fonksiyon içinde QString tipinde bir değişkene Textbox’tan aldığımız veriyi atıyoruz.Daha sonra  “ addItem “ fonksiyonunu kullanarak,aldığımız değeri Combobox’a ekliyoruz.Ardından  Textbox’ın içini temizliyoruz.Qt’de textbox’ların isimleri  “QLineEdit” diye geçer.

“SeciliElemaniGoster()” adlı fonksiyon  içinde ise Combobox’tan seçtiğimiz elemanı ekranda gösteriyoruz.

Evet her şeyi açıkladıktan sonra birde projemiziçalıştırıp,sonuçlara bakalım.
 
 
 
Uygulamayı indirmek için tıklayınız http://rapidshare.com/files/415716427/2010.04.rar 

Evet sonuç başarılı.Sanırsam yazımın sonuna gelmişim.Bugünlükbu kadar yeterli.Bir sonraki makalemde görüşmek dileğiyle …

Batuhan Düzgün

Sakarya Üniversitesi

BilgisayarMühendisliği 

Currently rated 5.0 by 4 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Qt ve C++

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  November 2018  >>
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

Yazıları geniş takvimde göster