QT Eğitimi - 2 :Yerleşim (Layout)

Benzer belgeler
QT Eğitimi - 4 : İkili Saat (Binary Clock)

Qt ile Bir Ağ Uygulaması

Parçacık (Widget) Eren BAŞTÜRK

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

Qt Temelleri. Eren BAŞTÜRK.

Qt ile Programlama. İşbaran Akçayır

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara

Compiere Açık kodlu ERP + CRM yazılımı. Hüseyin Ergün Önsel Armağan Serkan Demir

Android Ders Notları

Qt Temelleri. Eren BAŞTÜRK.

Düzenli İfadeler & Kullanım Alanları

Düzenli İfadeler & Kullanım Alanları

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Copyright 2006 Kaya Oğuz - Qt Türkiye -

Proje 1. Arayüz Tasarımı

LOGO 3 SERİSİ: KULLANICI DENEYİMİNİN BİTMEYEN YOLCULUĞU

2.Eclipse açıldıktan sonra Workspace alanı seçilmesi gerekir. Workspace alanı projelerinizin fiziksel olarak bulunduğu kısımdır.

KENDİ ÇİZİM PROGRAMIMIZI OLUŞTURALIM

HESAP MAKİNASI YAPIMI

Kabuk Programlama (Bash)

Nesneye Dayalı Programlama Laboratuvarı


KENDİ ÇİZİM PROGRAMIMIZI OLUŞTURALIM

Şekil 7.14: Makro Kaydet Penceresi

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

NESNEYE YÖNELİK PROGRAMLAMA

Sınav tarihi : Süre : 60 dak.

MENÜ AYARLAMA 1. MENÜ AYARLAMA. [X] [X] Standard. [X] [X] Yeni Fonksiyon

Qt Pencereleri. Pencere var, pencere var. Designer Dosyaları. Kaya Oğuz. Bu belge ve içerisindeki kodlar GPL lisanslıdır.

C Konsol ve Komut Satırı

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi KULLANICI ARAYÜZ. BLM401 Dr.Refik SAMET

Response : Sunucunun istemciye veri yollamasını

Windows 10 için Java JDK 8 ve NetBeans IDE 8.2 Kurulumu Detaylı Anlatım

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Nevşehir Hacı Bektaş Veli Üniversitesi. Moodle Uzaktan Eğitim Sistemi. Öğretim Elemanı Bilgilendirme Kılavuzu

Açılan programın pencere görünümü aşağıdaki gibidir. 2. Araç Çubuğundan kaydet düğmesi ile

Kod Listeleri Genel Yapısı

Ruby On Rails. Hüseyin Gömleksizoğlu

Linux Terminal Sunucusu. Afşin Taşkıran

Mantıksal Hacim Yönetimi (LVM)

SolidWorks Macro, SolidWorks API. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı


PORT HABERLEŞME SERİ PORT FARUK BOZAN

Elektra Raporlama Sistemi Sunumu

DORYA ROBOTİK. İçindekiler. Kitap Sayfa Sayısı: 80 Kitap Fiyatı: 24,00 TL

Qt ye Giriş. Can Kavaklıoğlu. 19 Temmuz Trolltech in Qt 4.0 alt yapısını kullanarak programlama yapmak için gerekli kütüphaneleri yüklemek

İdari Birimler Yönetim Paneli Kullanma Kılavuzu Bilgi İşlem Daire Başkanlığı Web Tasarım Ve Yazılım Birimi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bigisayar Programlama

ASP.NET ile Bir Web Sitesi Oluşturma

C++ Dersi: Nesne Tabanlı Programlama

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

Ecza Depolarına Ait E-Fatura Aktarım Modülü

GİDEN EVRAK HAZIRLAMA ONAYA SUNMA VE GÖNDERME

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Nevşehir Hacı Bektaş Veli Üniversitesi Moodle Uzaktan Eğitim Sistemi Öğretim Elemanı Bilgilendirme Kılavuzu

Kullanıcı Giriş Ekranı

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

HSancak Nesne Tabanlı Programlama I Ders Notları

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

ECLIPSE IDE C/C++ Geliştiricileri Đçin

Bolum 9. Konu Başlıkları

Bİ L 131 Hafta 2. 1) Bilgisayara Java SE Development Kit 7 kurulması

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

1 PROGRAMLAMAYA GİRİŞ

Linux Kurulumu (Sürüm 1.52) İçindekiler

Web sayfalarında yapılan her çalışma ve düzenleme tablolar aracılığı ile yapılır. Dolayısıyla çoğu web sayfalarında tablo kullanmak zorunluluktur.

Ecat 8. Hakbim Bilgi İşlem A.Ş. Versiyon

1 Aralık 2011 / Perşembe

1. VERİ TABANI ARAÇLARI

WORDPRESS İLE BLOG TASARLAMA REHBERİ İçindekiler

BİL-142 Bilgisayar Programlama II

BLGM 354 DENEY 1 * GİRİŞ

PYTHON PROGRAMLAMA DİLİ

Conficy Efficy 2014 Kullanıcı Kılavuzu. Oturum Açma. Ana Ekran. Alan Ekleme. Formlar

ZTerminal KULLANMA KILAVUZU. yazılımı. USB Terminal

ÖNDER BİLGİSAYAR KURSU. Microsoft Office Kursu Eğitim İçeriği

Finans Dünyasında Linux ve Özgür Yazılımlar

İçindekiler. Akıllı Tahta Uygulaması (ATU) Kullanma Kılavuzu. İçindekiler. Bölüm 1: Uygulama Hakkında Genel bilgi 2

KOD PARÇACIKLARI 1 / 5

AKINSOFT WOLVOX Beyanname

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU

Giris {\} /\ Suhap SAHIN Onur GÖK

5.1. Temalar, Kenar Boşlukları, Yönlendirme, Boyutlar, Yazdırma Alanı, Arka Plan

Qt 4 ile C++ GUI Programlama

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

MPLAB PROGRAM GELİŞTİRME ORTAMINDA CC8E İLE KOD HAZIRLAMA HAZIRLAYAN: DOÇ. DR. HAMİT ERDEM ARAŞ. GÖR. GENCER TULAY

5. Tablo İşlemleri. Bu bölümü bitirdiğinizde,

GtkD ile Görsel Programlama

C# ile e-posta Göndermek

OKUL HABER EKLEME MODÜLÜ TANITIM DOSYASI. Okul haberlerinizi ilçemiz web sitesinde yayınlayabilmek için aşağıdaki adımları uygulamanız gerekmektedir.

DBMAIL KURULUMU BELGESI (Howto Install Dbmail) Yazan: Ozgur Karatas

Metin Tabanlı İçerik Oluşturma Araçları

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Önce başlıkları alt alta yazıyoruz ve bunları sırası liste (Unordered list) haline getirip her satıra ayrı ayrı link veriyoruz.

MPLAB IDE ve ISIS ile ASSEMBLY DİLİNDE UYGULAMA GELİŞTİRMEK

Transkript:

QT Eğitimi - 2 :Yerleşim (Layout) Önder Arslan <onder@xcoders.net> 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ş QT eğitimine yerleşim (layout) 'lerle devam ediyoruz. Aslında bunu anlatmanın sanırım en kolay yolu beş-on tane QPushButton oluşturup bunları bir şekilde yerleştirmek olmalı ama biz her zaman olduğu gibi zor yolu seçeceğiz. Her örnekte biraz daha fazla kontrol kullanıp bunların da birkaç özelliğini öğrenmek ufkumuzun açılmasına biraz daha yardımcı olucak diye düşünüyorum. Önceki derste kullandığım kontroller ve özellikleri konusunda fazla açıklama yapmayacağım. Anlayamadığınız yerde birinci derse dönebilirsiniz. Yerlesim QT4 'te yerlesim (layout) sistemi oldukça güçlü ve kolay. Kontrollerinizi yerleştirmek için kullanabileceğiniz üç tane yerleşim sınıfı (layout classes) var : yatay, dikey ve ızgara yerleşim sınıfları (horizontal, vertica, grid layout classes). Yine adeti bozmadan sınıf bildirimimizle başlıyoruz : /*--- form.h ---*/ #ifndef FORM_H #define FORM_H #include <QtGui> class Form : public QDialog Q_OBJECT public: QPushButton *btnmesaj; QPushButton *btnac; QPushButton *btntemizle; QPushButton *btncik; QLabel *lblmesaj; QLabel *lblac; QLabel *lbltemizle; QTextEdit *yazi; QDirModel *model; QTreeView *treedosyalar;

Form(); public slots: void mesajgoster() QMessageBox::information(this, "Mesaj", "Layer 'lar o kadar da zor degilmis :)"); ; #endif void dosyaac() QString dosyayolu = QFileDialog::getOpenFileName(this); QFile dosya(dosyayolu); dosya.open(qfile::readonly QFile::Text); QTextStream ts(&dosya); yazi->setplaintext(ts.readall()); void treeac(const QModelIndex qm) QDirModel *yol= new QDirModel(); QFile dosya_(yol->filepath(qm)); dosya_.open(qfile::readonly QFile::Text); QTextStream ts_(&dosya_); yazi->setplaintext(ts_.readall()); form.h: İlk olarak yine başlık (header file ) dosyamıza include ön işlemci komutuyla gerekli modülleri ekliyoruz. QtGui modülü qt 'deki görsel kontrolleri barındırdığı için "merhaba dünya" örneğinde olduğu gibi tüm kontrolleri tek tek include önişlemci komutuyla dahil etmemize gerek kalmıyor. Hemen altında form sınıfımızı tanımlıyoruz ve public türetmesi ile QDialog 'dan türetiyoruz. QDialog kullanıcı arabirimimizin tabanı diyebiliriz. Kontrollerimizi bunun üstünde oluşturuyoruz, windows 'ta form, java 'da jframe gibi ;) Hemen altında Q_OBJECT makromuzu ve yapıcı fonksiyon (constructer) ile kullanıcağımız kontrollerin bildirimlerini yapıyoruz : QPushButton, QLabel, QTextEdit, QTreeView. public slots 'a butonlar tıklandığı zaman ve treeview 'dan bir text dosyası üzerinde çift tıklandığı zaman çalışacak fonksiyonları tanımlıyoruz. mesajgoster() fonksiyonu bir önceki derse gönderme olarak orda : QMessageBox 'ın kullanımını unutmadık değil mi? dosyaac() fonksiyonu btnac QPushButton 'ına tıklanınca çalışacak fonksiyon adından belli olduğu gibi bir text dosyası açmaya yarıyor. Bu fonksiyon içinde QFileDialog kontolü yardımıyla seçtiğimiz text dosyasını bir QString değişkene atıyoruz. Daha sonra bu text dosyası için "dosya" adında QFile nesnesi oluşturuyoruz. QFile sınıfı bize dosyaya yazma ve dosyadan okuma yapabilmemiz için bir arayüz sağlıyor. QFile 'ın open fonksiyonuyla dosyamızı salt okunur ve text modunda açıyoruz. QTextStream nesnesi oluşturarak QTextEdit 'in setplaintext fonksiyonu ile açılan dosyadaki yazıları görüntülüyoruz. treeac(const QModelIndex qm) fonksiyonu 'da dosyaac() fonksiyonuyla aynı işi yapıyor. treeac fonksiyonu dosyanın yol bilgisini dosyaac fonksiyonundan farklı olarak bir QDirModel nesnesi ile yerel dosya sistemine erişerek QTreeView 'de seçilen text dosyasının yolunu QFile nesnesine geçiyor. /*--- form.cpp ---*/

#include "form.h" Form::Form() resize(600,600); QGridLayout *glayout= new QGridLayout(); lblmesaj = new QLabel("Mesaj goster :"); glayout->addwidget(lblmesaj,0,0); lblac = new QLabel("Dosya Ac :"); glayout->addwidget(lblac,1,0); lbltemizle = new QLabel("Temizle :"); glayout->addwidget(lbltemizle,2,0); btnmesaj = new QPushButton("Mesaj Goster"); glayout->addwidget(btnmesaj,0,1); btnac = new QPushButton("Dosya Ac"); glayout->addwidget(btnac,1,1); btntemizle = new QPushButton("Temizle"); glayout->addwidget(btntemizle,2,1); treedosyalar = new QTreeView(); model = new QDirModel(); treedosyalar->setmodel(model); glayout->addwidget(treedosyalar,0,2,14,1); yazi = new QTextEdit(); yazi->setplaintext("temizle butonuna basarsan bu yazi silinir :)"); yazi->resize(550,300); glayout->addwidget(yazi,15,0,1,3); QHBoxLayout *hlayout = new QHBoxLayout(); btncik = new QPushButton("Cik Git"); hlayout->addstretch(10); hlayout->addwidget(btncik,qt::alignright); QVBoxLayout *alayout = new QVBoxLayout(); alayout->addlayout(glayout); alayout->addlayout(hlayout); setlayout(alayout); connect(btnmesaj,signal(clicked()),this,slot(mesajgoster())); connect(btnac,signal(clicked()),this,slot(dosyaac())); connect(btntemizle,signal(clicked()),yazi,slot(clear())); connect(btncik,signal(clicked()),this,slot(reject())); connect(treedosyalar, SIGNAL(doubleClicked(QModelIndex )),this, SLOT(treeAc(const QModelIndex ))); form.cpp

İlk olarak resize fonksiyonu ile QDialog 'un genişlik ve yüksekliğini ayarlıyoruz - Tamamen keyfi :) -. Bir QGridLayout nesnesi (glayout) oluşturuyoruz. Izgara yerleşimi (Grid layout) adından da anlaşıldığı üzere yerleşiminizi bölünmüş kareler (yada dikdörgtenler ;) ) yardımıyla yapmanızı sağlıyor. Oldukça kullanışlı ve kolay. Grid yerleşimine kontrolleri(widget) addwidget fonksiyonu ile yerleştiriyoruz. addwidgetin aldığı değerler sırasıyla : eklenecek kontrol ismi (widget name), yerleştirilecek satır(row), yerleştirilecek kolon(column), içerdiği satır (rowspan), içerdiği kolon (column span) ve hizalama(alignment ). Örneğin glayout->addwidget(yazi,15,0,1,3); satırında QTextEdit nesnesi 15 inci satır, 0 ncı kolona, 1 satır ve 3 kolon 'u kapsayacak şekilde ekliyoruz. glayout->addwidget(lblac,1,0); satırında addwidget'in sadece satır ve kolon bilgileri isteyen overload 'unu kullandığımı söylememe gerek yok sanırım ;) btncik (çıkış düğmesi) 'ni eklemek için bir yatay yerlesim nesnesi (QHBoxLayout) oluşturuyoruz. QHboxLayout 'u kontrolleri yatay yerleştirmek için kullanıyoruz. hlayout- >addwidget(btncik,qt::alignright); satırıyla çıkış düğmesini sağa hizalı olarak ekliyoruz. Bundan önceki satırda addstretch fonksiyonunu çağırdığıma dikkat edin, gerginlik(stretch) ayarını yapmassanız yerleştirdiğiniz düğme kolon genişliğinde görünür. Dikkat ederseniz tüm yerleşim nesnelerine bir kontrol eklemek addwidget fonksiyonuyla ekliyoruz. Oluşturduğumuz QGridLayout ve QHBoxLayout 'u alt alta yerleştirmek için yatay yerleşim (QVBoxLayout) nesnesi oluşturuyoruz. Yalnız ekleyeceğimiz nesneler birer yerleşim(layout) olduğundan bu sefer addlayout fonksiyonunu kullanıyoruz. Son olarak setlayout fonksiyonu ile QDialog 'umuzun yerleşimi olarak tüm layoutlarımızı barındıran alayout -QVBoxLayoutnesnemizi ayarlıyoruz.signal ve SLOT 'lar için birinci derse bakabilirsiniz ;) /*--- main.cpp ---*/ #include "form.h" #include <QApplication> int main(int argc, char *argv[]) QApplication app (argc,argv); Form form; form.show(); return app.exec(); main.cpp main.cpp kaynak kod dosyası içinde önceden açıklanmayan hiçbir kod parçası yok ;) Derleme ve Çalıştırma Yazdığınız programı (eğer yazdıysanız) çalıştırdıysanız linux altında şöyle bir ekran görüntüsü ile karşılaşmalısınız :

Kısaca çalışmasına bakarsak : Mesaj Göster yazan düğmeyi tıklarsanız mesaj görürsünüz. Dosya aç butonuyla yada ağaç yardımıyla dosya seçebilirsiniz. Temizleye basarak yazıları silebilir çık düğmesiyle de çıkabilirsiniz :) Hepsi bu. Son Söz Yazının başında bahsettiğim gibi yerleşimleri (layout) öğrenmek için fazla fazla kodlar yazdık :) Kodları fazla şişirmemek için hata kontrolü yapmadım. Yani metin dosyası dışında bir dosyayı açmaya çalışmayın :) Açmaya çalışırsanız ne olacağı konusunda bir fikrim yok. Telif Hakkı ve Lisans Bu belgenin, QT Eğitimi - 2 : Yerleşim (Layout), 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.