Qt ile Programlama. İşbaran Akçayır http://ish.kodzilla.org



Benzer belgeler
Qt Temelleri. Eren BAŞTÜRK.

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

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

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

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

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

Qt 4 ile C++ GUI Programlama

PyQt ile İş Uygulaması Geliştirimi

Qt ile Bir Ağ Uygulaması

Linux Grafiksel Arayüz Kütüphaneleri

Qt Temelleri. Eren BAŞTÜRK.

1 PROGRAMLAMAYA GİRİŞ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

Python GELECEK. Barış Metin Linux Sistemleri. Python Programlama Dili

Glade. hitokiri. Eylül, 2012

C# nedir,.net Framework nedir?

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Burak Kıymaz JAVA FX

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Teknikleri. Önsöz. iskender atasoy

Üst Düzey Programlama

Data Structures Lab Güz

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

JAVA API v2.0 Belge sürümü: 2.0.2

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

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

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

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

YZM 2105 Nesneye Yönelik Programlama

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Android Ders Notları

Algorithm of Your Life. AJAX ve...

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

OpenGL Uygulamaları. 1. Giriş. 2. OpenGL. Deney 2

YZM 2105 Nesneye Yönelik Programlama

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Android e Giriş. Öğr.Gör. Utku SOBUTAY

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

Android Kaynakları (Resources)

M.Ali VARDAR 2006 Qt'ye Giriş QT 'YE GIRIŞ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

1 JAVASCRIPT NEDİR? 1

İnternet Programcılığı

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Bilgisayar Programlama. 1.Hafta

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş

Nesneye Dayalı Programlama Laboratuvarı

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

Karma C/C + + Kodlama

C Konsol ve Komut Satırı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

PROGRAMLAMA DERSİ 1. İNTERNET

Hafta 13 Fonksiyonlar

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

İNTERNET TABANLI PROGRAMLAMA

BİT in Temel Bileşenleri (Yazılım-1)

Üst Düzey Programlama

1.PROGRAMLAMAYA GİRİŞ

Özgür Yazılımlarla Web Programlama. Özlem Özgöbek

GtkD ile Görsel Programlama

Lecture 11: Generics

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

Öğr.Gör. Gökhan TURAN Gölhisar Meslek Yüksekokulu

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

HSancak Nesne Tabanlı Programlama I Ders Notları

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

BioAffix Ones Technology nin tescilli markasıdır.

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

BİL-142 Bilgisayar Programlama II

İNTERNET PROGRAMCILIĞI - II

4. Bölüm Programlamaya Giriş

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

10/17/2007 Nesneye Yonelik Programlama 3.1

Veritabanı. Ders 2 VERİTABANI

C++ Dersi: Nesne Tabanlı Programlama

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

KONTROL VE OTOMASYON KULÜBÜ

R ile Programlamaya Giriş ve Uygulamalar

BOOTLOADER MANUAL DOCUMENT

XAML Dili Microsoft Blend. Tasarım ve Kodlamanın. Birbirinden Ayrılması

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Jval tipi. Genel veri yapılarını kullanacağımız zaman Jval den faydalanırız.önemli olanlar aşağıda mevcuttur:

JavaFX Temelleri (1)

NESNEYE YÖNELİK PROGRAMLAMA

Dizi ( Array ) ve Dizgi ( String )

Basit bir web uygulaması

Transkript:

Qt ile Programlama İşbaran Akçayır http://ish.kodzilla.org 1

Nedir Qt, platformlar arası bir uygulama geliştirme sistemidir. (ya da iskeleti diyebiliriz) Genellikle GUI içeren programlar geliştirmede kullanılır, Qt 4 sürümü ile konsol araçları ya da sunucular gibi grafik arayüz içermeyen programlar geliştirmede de kullanılır olmuştur. Qt kullanılan bir kaç proje: Opera, Google Earth, Skype, Qtopia (Qt Palmtop Environment), OPIE( Open Palmtop Integrated Environment ) ve KDE. Norveçli Trolltech ( Quasar Technologies ) tarafından geliştiriliyor. 2

Nedir Qt bir C++ sınıf kütüphanesi, ve geliştirme ve uluslararasılaştırma için araçlar içerir. Qt standart C++ kullanır. Ama diğer dillerde kod yazımına da olanak sağlayan bağlayıcıları içerir (binding) : Python (PyQt), Ruby (QtRuby), PHP, C, Perl, Pascal, C#, Java (Jambi) 3

Platformlar Qt/X11 X Window System (Unix / Linux) Qt/Mac Apple Mac OS X Qt/Windows Microsoft Windows Qt/Embedded Gömülü platformlar (PDA, Smartphone,...) Qt/Jambi Java platformu geliştirilmesi 4

Dağıtımlar Qt Console Konsol tabanlı programlama için Qt Desktop Light Giriş seviyesinde, ağ ve veri tabanı desteği yok. Qt Desktop Qt Open Source Edition Qt Commercial Edition Çift Lisanslı 5

#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("hello world!", 0); hello.resize(100, 30); } hello.show(); return app.exec(); 6

Qt kullanan her GUI uygulama bir QApplication nesnesi içermek zorundadır. QApplication uygulama genelinde kaynakların yönetilmesinden sorumlu. ( fontlar, fare imleci.. ) QPushButton ve Widget'ler.. app.exec(); ile main() kontrolü Qt'ye devreder. derleme: qmake -project qmake make 7

Örnek proje dosyası # Automatically generated by qmake (2.01a) Sal Mar 13 00:50:18 2007 ################################################# ########### TEMPLATE = app TARGET = CONFIG += qt debug opengl thread DEPENDPATH +=. LIBS += -lkdecore -lkdeui -L/usr/kde/3.5/lib/ INCLUDEPATH +=. /usr/kde/3.5/include # Input HEADERS += hello.h SOURCES += hello.cpp main.cpp RESOURCES += application.qrc QT += network xml ( veya QT -= gui ) win32 { SOURCES += hellowin.cpp } unix { SOURCES += hellounix.cpp }!exists( main.cpp ) { error( "main.cpp dosyasi bulunamadi" ) } 8

Kaynak dosyası <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>images/copy.png</file> <file>images/cut.png</file> <file>images/new.png</file> <file>images/open.png</file> <file>images/paste.png</file> <file>images/save.png</file> </qresource> </RCC> 9

Sınıflar Hakkında Qt4 farklı kütüphaneler içinde olan bir çok modülün bir araya gelmesiyle oluşuyor. QtCore, QtGui, QtNetwork, QtOpenGL, QtSql.. QtCore ve QtGui ön tanımlı 10

Qt Nesne Modeli Standart C++ nesne modeli çalışma anında nesne paradigması için çok etkin. Ama bazı problemlerin çözümünde doğası gereği statik olmasının dezavantajları var. GUI programlamada ise hem çalışma anında efektif olmalı, hem de yüksek esnekliği olmalı. 11

Qt = C++ + Sinyal ve Slot mekanizması Dizayn edilebilir nesne özellikleri - Event ve event filter mekanizması Stringler üzerinde güçlü işlemler ( Ulusallaştırma ) Timer ( zamanlayıcılar ) - Hiyerarşik nesne yapısı - Korumalı işaretçiler ( Qpointer ) Dynamic cast........ 12

Stiller Qt'nin widget stilleri programınızın masaüstü ortamına tam uyum sağlayabilmesini sağlar. QT4 Widget Stilleri: 13

14

Layout Sistemi ( Dağılım ) Horizontal, Vertical, Grid QHBoxLayout, QVBoxLayout, QGridLayout QWidget *window = new QWidget; QPushButton *button1 = new QPushButton("One"); QPushButton *button2 = new QPushButton("Two"); QHBoxLayout *layout = new QHBoxLayout; layout->addwidget(button1); layout->addwidget(button2); window->setlayout(layout); window->show(); 15

Containers QList<T> ( Diziler, index ile hızlı erişim, QList::append(), Qlist::prepend().. ) QLinkedList<T> ( Bağlı Liste ) QVector<T> ( Başa veya sona ekleme zor olabilir ) QStack<T> QQueue<T> QMap<Key, T> ( Anahtar sırasına göre depolar ) QMultiMap<Key, T> ( Multi value ) QHash<Key, T> depolama ) QMultiHash<Key, T> ( Çok daha hızlı arama, rasgele 16

QPointer QPointer<T> ( T, Qobject'ten türemiş ) QLabel *label = new QLabel; QPointer<QLabel> safelabel = label; safelabel->settext("hello world!"); delete label; Korumalı işaretçiler otomatik olarak T * tipe dönüştürülür, yani korumasız olanlarla karıştırılması sorun yaratmaz. 17

Uluslararasılaştırma Hazır metin motorunun gücü Destek kapsüllenmiştir. Unicode 4.0 kullanan QString kullanın Tüm metinlerde tr() kullanın LoginWindow::LoginWindow() { QLabel *label = new QLabel("Password:"); // yanlış QLabel *label = new QLabel(tr("Password:"));... } exitact = new QAction(tr("E&xit"), this); exitact->setshortcut(tr("ctrl+q")); 18

QT Linguist Bir Qt uygulamasının dil dönüşümü 3 aşamadır. lupdate C++ kaynak kodlarından çevirisi yapılacak metnin çıkarılması için.ts dosyalarının oluşturulması Qt Linguist.ts dosyalarının ( xml dosyalari ) Qt Linguist kullanarak hedef dile çevrilmesi lrelease.ts dosyasından bir mesaj dosyası (.qm ) elde etmek için kullanılır..ts dosyalarını kaynak dosyalar,.qm dosyalarını da nesne dosyaları olarak düşünebiliriz. Kullanıcılar sadece.qm dosyalarına ihtiyaç duyar. ( iki dosya da platform ve local bağımsızdır. ve.pro dosyası: TRANSLATIONS = uygulamaadi_tr.ts \ uygulamaadi_fi.ts \ 19

uygulama içi kullanım int main(int argc, char *argv[]) { QApplication app(argc, argv); QTranslator myapptranslator; myapptranslator.load("myapp_" + QLocale::system().name()); app.installtranslator(&myapptranslator); }... return app.exec(); Ayrıca bknz. ( QTextCodec.. I/O codec desteği ) 20

Qt Assistant Qt en iyi dokümantasyonu olan proje Açıklamalar hem kaynak kodları yazanlar tarafından.cpp dosyalarına yazılıyor, hem de dokümantasyon takımı web sitesi vs. ile sınıflar vb. alanların dokümantasyonunu hazırlıyor. 21

Qt Designer 22

Designer Formlarının kullanımı #include <QtGui> #include "ui_designer.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *widget = new QWidget; Ui::Form yenipencere; yenipencere.setupui(widget); widget->show(); } return app.exec(); // FORMS += designer.ui 23

Sinyal ve Slot Mekanizması Nesneler arası iletişim için kullanılıyor. Bir olay olduğunda, bir sinyal gönderilir Slotlar ise sinyallere cevap olarak çalıştırılan fonksiyonlardır. Qt widget lerinin sinyal ve slotlarının yanında kendi sinyal ve slotlarınızı da yazabilirsiniz. 24

Sinyal ve Slotlar Sinyal gönderen bir sınıf sinyali alan olup olmadığını bilmez, eğer bir sinyali bir slota bağlarsanız o sinyal verildiğinde o slot çalışır. Sinyal ve slotlar, parametre alabilir/gönderebilir. Sinyal ve slotlar GUI döngülerinden bağımsızdırlar, yani sinyal verildiği anda sinyalin bağlı olduğu slot çalıştırılır. Bu sayede en doğru şekliyle bilgi kapsülleme yapılmış olur ve nesnelerin bir yazılım bileşeni olarak kullanılması sağlanır. QObject (veya alt sınıflarından ) sınıfından türetilmiş her sınıf sinyal ve slot kullanabilir 25

#include <QObject> class Counter : public QObject { Q_OBJECT public: Counter() { x = 0; } int value() const { return x; } public slots: void setvalue(int value); Sinyal Slot Örnek signals: void valuechanged(int newvalue); private: int x; }; 26

Sinyal Slot Kullanım void Counter::setValue(int value) { if (value!= x) { x = value; emit valuechanged(value); } } // Örnek kullanım: Counter a, b; QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int))); a.setvalue(12); // a.value() == 12, b.value() == 12 b.setvalue(48); // a.value() == 12, b.value() == 48 // QObject::disconnect() 27

Meta Object Compiler C++ ön işlemcisi, sinyal, slot ve emit anahtar kelimelerini değiştirerek veya kaldırarak derleyiciye standart C++ sunar. moc'un sinyal ve slot içeren sınıf tanımlamalarına uygulanması ile, uygulama için gerekli diğer nesne dosyalarıyla derlenmesi ve bağlanması gereken C++ kaynak kodu üretilir. qmake kullanıyorsanız, projenizin Makefile dosyasına moc kuralları otomatik olarak eklenir. 28

Olaylar ve Filtreler ( Events ) Olaylar QEvent sınıfından türetilmiş nesneler. Her QObject alt sınıfı olayları alabilir ve işleyebilir. Bir olay olduğunda Qt QEvent alt sınıflarından uygun olan bir nesne oluşturur ve bu nesneyi QObject'in event fonksiyonunu çağırıp devreder. QResizeEvent, QPaintEvent, QMouseEvent, QKeyEvent, QCloseEvent... QEvent::Move QEvent::MouseMove QEvent::LanguageChange QEvent::KeyRelease QEvent::KeyPress... void QObject::mousePressEvent(QMouseEvent *event) 29

Event Handlers Normalde bir olayı bir virtual fonksiyon çağırarak geçiririz. Mesela QPaintEvent, QWidget::paintEvent() çağrılarak geçirilir. Özel olarak ele almak için ise, bir QCheckBox için örneğin: void BirCheckBoxSinifi::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) // sol tiklayinca bunu yap } else { // diğer butonlarda bunu yap QCheckBox::mousePressEvent(event); // Olayı yukarı geçir } } 30

Filtre yapmak ve olay yollamak bool FilterObject::eventFilter(QObject *object, QEvent *event) { if (object == target && event->type() == QEvent::KeyPress) { QKeyEvent *keyevent = static_cast<qkeyevent *>(event); if (keyevent->key() == Qt::Key_Tab) { return true; } else return false; } return false; } 31

Qt ile Programlama İşbaran Akçayır http://ish.kodzilla.org 32