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



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

Qt ile Bir Ağ Uygulaması

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

Qt Temelleri. Eren BAŞTÜRK.

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

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

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

Düzenli İfadeler & Kullanım Alanları

Düzenli İfadeler & Kullanım Alanları

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

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İ

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

NESNEYE YÖNELİK PROGRAMLAMA

C++ Dersi: Nesne Tabanlı Programlama

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

Nesneye Dayalı Programlama Laboratuvarı

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

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

Bolum 9. Konu Başlıkları

C Konsol ve Komut Satırı

1 PROGRAMLAMAYA GİRİŞ

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI

Mantıksal Hacim Yönetimi (LVM)

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

Linux ve Özgür Yazılım Nedir?

Veri Yapıları Lab Notları 1

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

C++ Dersi: Nesne Tabanlı Programlama

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

#ifndef COMPLEX_H #define COMPLEX_H

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

Uygulamalar 4 IsMissing Fonksiyonlar ve Alt Programlar Prosedür Parametreleri Public Function f(x,y,optional t, Optional k) End Function 1.

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

Bu uygulamayı yapabilmek için SQL Server'da Query Analyzer kullanabilmekle beraber, ADO.NET bilgisine sahip olmanız gerekir.

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

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

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

Resimlerin üstüne yazı yazacağız. resimyukle.aspx sayfası oluşturuyoruz.

HSancak Nesne Tabanlı Programlama I Ders Notları

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

Yrd. Doç. Dr. Caner ÖZCAN

NESNEYE YÖNELİK 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ı

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

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.

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

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

Paketi Açalım Indirmiş olduğunuz paketi tar komutu ile açın: tar xzf nagios version.tar.gz Kullanıcı Gruplarını Oluşturalım Paketi derledikten sonra n

Karma C/C + + Kodlama

Fonksiyonlar (Altprogram)

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

ASP.NET ile Bir Web Sitesi Oluşturma

C++ Dersi: Nesne Tabanlı Programlama

/* Çember alanını hesaplar */

Açık Kaynak Kodlu Optik Sınav Kağıtları Depolama Sistemi

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

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

Lambda İfadeleri (Lambda Expressions)

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

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

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

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İ

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Yrd. Doç. Dr. Caner ÖZCAN

SIMAN KULLANIM KILAVUZU

SORGULAR. Öğr.Gör.Volkan Altıntaş

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

İçerik Yönetim Sistemi. Joomla!

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Kabuk Programlama (Bash)

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

C++ Dersi: Nesne Tabanlı Programlama

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

4 Front Page Sayfası Özellikleri

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

İ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İ

Data Structures Lab Güz

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Windows Mobile İşletim Sistemleri İçin Veri Giriş Yazılımı

C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References)

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

C++ Dersi: Nesne Tabanlı Programlama

I. Oturum: GNU/LINUX A GİRİŞ

İNTERNET TABANLI PROGRAMLAMA

Alıcı Devresi; Sinyali şu şekilde modüle ediyoruz;

C++ Dersi: Nesne Tabanlı Programlama

Binary Tree nedir?uygulamas nasl yaplr?

Linux Assembly Programlamaya Giriş

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

İçerik Yönetim Sistemi. Joomla! Öğr.Gör. Serkan KORKMAZ. Birecik MYO

Object-Oriented Programming Laboratuvar 10

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

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

C# Console Uygulamaları ifelse Yapıları 2

Transkript:

QT Eğitimi - 4 : İkili Saat (Binary Clock) Ö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ş Kullanıcı arabirimi oluşturmayı öğrenirken insan arada şöyle çalışan bir şeyler de yapmak istiyor. QButton 'a bas mesaj kutusu çıksın, QButton 'a bas metin kutuları temizlensin sıkıcı oluyor. Bu nedenle dördüncü eğitimde "binary clock" uygulaması yazacağız. "Binary clock" ne derseniz budur : thinkgeek sitesinde satılır, kol saati ve masa saati biçimleri de vardır :)) Kol saati olanını hep almak istemişimdir ama nasip olmamıştır :( "Eee alamıyorsam kendim yapayım" dedim ve böylece qt uygulamamızın konusu oldu. Ama bu uygulamayı yaparken yeni sınıflar öğrenmeyi de ihmal etmeyeceğiz. Öğreneciğimiz sınıflar : QLabel, QTimer, QPixmap, QTime... Saat /*--- form.h ---*/ #ifndef FORM_H #define FORM_H #include <QtGui> class Form : public QDialog Q_OBJECT public: Form();

QLabel *lbl_hour_first_1; QLabel *lbl_hour_first_2 ; QLabel *lbl_hour_second_1; QLabel *lbl_hour_second_2; QLabel *lbl_hour_second_4; QLabel *lbl_hour_second_8; QLabel *lbl_second_first_1; QLabel *lbl_second_first_2; QLabel *lbl_second_first_4; QLabel *lbl_second_second_1; QLabel *lbl_second_second_2; QLabel *lbl_second_second_4; QLabel *lbl_second_second_8; public slots: void Update(); ; #endif form.h: Başlık dosyamızda sizinde farkettiğiniz gibi QLabel dışında öğrenmediğimiz bir şey yok ;) QLabel metin ve imaj görüntülemek için tasarlanmış bir sınıf. Aslında qt dışında (c# ta yada vb 'de label kullanımında) bir label 'ın imaj gösterebilmesinin böyle üstüne basıldığını (The QLabel widget provides a text or images display.) görmemiştim. Bugüne kadar kullanımlarım hep metin gösterimi şeklindeydi. Bir Label benim için kullanıcı arabiriminde ya metin kutusunun kutusunun içine ne yazılması gerektiğini ya da tıklanacak düğmenin ne iş yapacağını anlatırdı felan. Bu sebeple aslında ilk aklıma gelen programda saati ve dakikayı gösteren ışıkları qt 'ye çizdirmekti. Ama bu uygulamada QLabel kullancağız ;) : lbl_hour_first saatin ilk hanesini (ör: 13:29 da 'da 1 'i gösterir) lbl_hour_second saatin ikinci hanesini (ör: 13:29 'da 3 'ü gösterir) lbl_second_first dakikanın birinci hanesini gösterir (ör: 13:29 'da 2 'yi gösterir) lbl_second_second dakikanın ikinci hanesini gösterir (ör:13:29 'da 9 'u gösterir) /*--- form.cpp ---*/ #include "form.h" #include <map> #include <algorithm> #include <functional> using namespace std; typedef pair<int,int> light_pair; static int first, second;

static map<int,light_pair> mymap; pair<int,int> gettime() QTime time = QTime::currentTime(); return make_pair(time.hour(),time.minute()); Form::Form() mymap.insert(make_pair(1,light_pair(1,0))); mymap.insert(make_pair(2,light_pair(2,0))); mymap.insert(make_pair(3,light_pair(1,2))); mymap.insert(make_pair(4,light_pair(4,0))); mymap.insert(make_pair(5,light_pair(1,4))); mymap.insert(make_pair(6,light_pair(2,4))); mymap.insert(make_pair(7,light_pair(7,7))); mymap.insert(make_pair(8,light_pair(8,0))); mymap.insert(make_pair(9,light_pair(1,8))); lbl_hour_first_1 = new QLabel(this); lbl_hour_first_2 = new QLabel(this); lbl_hour_second_1 = new QLabel(this); lbl_hour_second_2 = new QLabel(this); lbl_hour_second_4 = new QLabel(this); lbl_hour_second_8 = new QLabel(this); lbl_second_first_1 = new QLabel(this); lbl_second_first_2 = new QLabel(this); lbl_second_first_4 = new QLabel(this); lbl_second_second_1 = new QLabel(this); lbl_second_second_2 = new QLabel(this); lbl_second_second_4 = new QLabel(this); lbl_second_second_8 = new QLabel(this); lbl_hour_first_1->move(5, 140); lbl_hour_first_2->move(5, 100); lbl_hour_second_1->move(50, 140); lbl_hour_second_2->move(50, 100); lbl_hour_second_4->move(50, 60); lbl_hour_second_8->move(50, 20); lbl_second_first_1->move(100, 140); lbl_second_first_2->move(100, 100); lbl_second_first_4->move(100, 60); lbl_second_second_1->move(145, 140); lbl_second_second_2->move(145, 100); lbl_second_second_4->move(145, 60); lbl_second_second_8->move(145, 20);

lbl_hour_first_1->setpixmap(qpixmap("bir.gif")); lbl_hour_first_2->setpixmap(qpixmap("bir.gif")); lbl_hour_second_1->setpixmap(qpixmap("bir.gif")); lbl_hour_second_2->setpixmap(qpixmap("bir.gif")); lbl_hour_second_4->setpixmap(qpixmap("bir.gif")); lbl_hour_second_8->setpixmap(qpixmap("bir.gif")); lbl_second_first_1->setpixmap(qpixmap("bir.gif")); lbl_second_first_2->setpixmap(qpixmap("bir.gif")); lbl_second_first_4->setpixmap(qpixmap("bir.gif")); lbl_second_second_1->setpixmap(qpixmap("bir.gif")); lbl_second_second_2->setpixmap(qpixmap("bir.gif")); lbl_second_second_4->setpixmap(qpixmap("bir.gif")); lbl_second_second_8->setpixmap(qpixmap("bir.gif")); resize(200,200); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(Update())); timer->start(1000); void Form::Update() first = mymap[ (gettime().first - gettime().first %10) /10 ].first; second = mymap[(gettime().first - gettime().first %10) / 10].second; lbl_hour_first_1->setpixmap(qpixmap("bir.gif")); lbl_hour_first_2->setpixmap(qpixmap("bir.gif")); if (first == 1 second == 1) lbl_hour_first_1->setpixmap(qpixmap("iki.gif")); lbl_hour_first_2->setpixmap(qpixmap("iki.gif")); first = mymap[gettime().first %10].first; second = mymap[gettime().first%10].second; lbl_hour_second_1->setpixmap(qpixmap("bir.gif")); lbl_hour_second_2->setpixmap(qpixmap("bir.gif")); lbl_hour_second_4->setpixmap(qpixmap("bir.gif")); lbl_hour_second_8->setpixmap(qpixmap("bir.gif"));

if (first == 1 second == 1) lbl_hour_second_1->setpixmap(qpixmap("iki.gif")); lbl_hour_second_2->setpixmap(qpixmap("iki.gif")); if (first == 4 second == 4) lbl_hour_second_4->setpixmap(qpixmap("iki.gif")); if (first == 8 second == 8) lbl_hour_second_8->setpixmap(qpixmap("iki.gif")); if (first == 7 second == 7) lbl_hour_second_1->setpixmap(qpixmap("iki.gif")); lbl_hour_second_2->setpixmap(qpixmap("iki.gif")); lbl_hour_second_4->setpixmap(qpixmap("iki.gif")); first = mymap[ (gettime().second - gettime().second %10) /10 ].first; second = mymap[(gettime().second - gettime().second %10) /10].second; lbl_second_first_1->setpixmap(qpixmap("bir.gif")); lbl_second_first_2->setpixmap(qpixmap("bir.gif")); lbl_second_first_4->setpixmap(qpixmap("bir.gif")); if (first == 1 second == 1) lbl_second_first_1->setpixmap(qpixmap("iki.gif")); lbl_second_first_2->setpixmap(qpixmap("iki.gif")); if (first == 4 second == 4) lbl_second_first_4->setpixmap(qpixmap("iki.gif")); first = mymap[gettime().second %10].first; second = mymap[gettime().second %10].second; lbl_second_second_1->setpixmap(qpixmap("bir.gif")); lbl_second_second_2->setpixmap(qpixmap("bir.gif")); lbl_second_second_4->setpixmap(qpixmap("bir.gif")); lbl_second_second_8->setpixmap(qpixmap("bir.gif")); if (first == 1 second == 1) lbl_second_second_1->setpixmap(qpixmap("iki.gif")); lbl_second_second_2->setpixmap(qpixmap("iki.gif")); if (first == 4 second == 4) lbl_second_second_4->setpixmap(qpixmap("iki.gif")); if (first == 8 second == 8) lbl_second_second_8->setpixmap(qpixmap("iki.gif")); if (first == 7 second == 7) lbl_second_second_1->setpixmap(qpixmap("iki.gif")); lbl_second_second_2->setpixmap(qpixmap("iki.gif")); lbl_second_second_4->setpixmap(qpixmap("iki.gif"));

form.cpp Form.cpp kaynak dosyasının uzunluğu biraz büyük görünsede gözünüzü korkutmasın. Çünkü kullanılan kontrollerin çokluğu nedeniyle biraz fazla, sadece ışıkları göstermek için 13 adet QLabel kullandığımızı ve bunların 2 özelliğni kullandığımızda 26 satır ettiğini düşünürseniz korkacak birşey kalmıyor ;) Bir saat yapabilmek için öncelikle saatin kaç olduğunu bilmemiz lazım :) Bu nedenle gettime() adında bir fonksiyon yazıyoruz. gettime() içinde currenttime() değeriyle set edilmiş bir QTime nesnesi oluşturuyoruz. bu nesnenin hour() fonksiyonuyla saati minute() fonksiyonu ile dakikayı alıp geri dönüş değeri olarak döndürüyoruz. Static QLabel nesnelerimizi oluşturduktan sonra ( ki kodun 13 satırı burası ;) ) move komutu ile onları istediğimiz yere taşıyoruz (kodun 13 satırı da bu etti 26 satır). Qt resim gösterimi için dört sınıf sunar : QPixmap, QImage, QBitmap ve QPicture. QPixmap resim gösterimi için kullanacağımız sınıftır. Bu sınıf ile QLabel 'da setpixmap() fonksiyonunu kullanarak resim gösterebiliriz. Hatta QAbstractButton sınıfının alt sınıfları olan QPushButton, QToolButton gibi kontroller üzerinde de resim gösterebiliriz.bizde QLabel 'larımıza setpixmap() fonksiyonu ile QPixmap ' nesnelerimizi atıyoruz (yani bir.gif resmini). QTimer bize tekrarlanan yada tek-atışlık zamanlıyıcı olanağı sunar. Biz programızda zamanlayıcıyı belirli zamanlarda (bu programda 1000ms 'de) çalıştırarak saatte olan değişiklikleri görebilmek için Update() komutunu çağırıyoruz. Örneğin connect(timer, SIGNAL(timeout()), this, SLOT(Update())); satırında zamanlayıcı her timeout() fonksiyonunu çalıştırdığında Update() slotumuz çalışıyor. QTimer nesnesinin timeout değeri milisaniye olarak interval değişkeninde saklanır. Bu değeri ayarlamak için setinterval() fonksiyonu kullanılır. Biz kodumuzda start() fonksiyonunun parametre değişkenini kullanarak bu değeri(interval) ayarladık. Update() fonksiyonu içinde setpixmap() fonksiyonu ile saate göre uygun imajı QLabel 'lara atamaktan başka bir işlem yapılmıyor. /*--- main.cpp ---*/ #include <QApplication> #include "form.h" int main(int argc, char *argv[]) QApplication app(argc, argv); Form form; form.show(); return app.exec(); main.cpp main.cpp dosyası yine aynı ;) Derleme ve Çalıştırma

Program derlenip çalıştırıldığında aşağıdaki gibi görünür : Saatin 15:12 olduğunu söylememe gerek yok herhalde ;) Son Söz Programın algoritmasını tabiki açıklamadım, konumuz algoritmalar değil ;). Ben algoritmayı STL kullanarak oluşturdum. Siz çok daha farklı algoritmalar kullanıp kodu benden çok daha kısa yazabilirsiniz. ;) Telif Hakkı ve Lisans Bu belgenin, QT Eðitimi - 4 : İkili Saat (Binary Clock), 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.