13 Haziran 2014 Cuma

QT ile Gui Programlama



QT ile Gui Programlama

          Sizlerde C++ ' ı konsol üzerinde öğrenip bir türlü görsel arayüz tasarımına geçememişseniz (benim gibi ) bu yazının iyi bir başlangıç olacağını düşünüyorum. Yaptığım araştırma ve denemeler sonucunda bu işin Linux üzerinde nasıl yapıldığını az çok anlamış bulunuyorum. Aşağıda Linux içerisinde QT Creator ile C++ kodlarımızla görsel programlamaya dair bulduğum kitaplar , kaynak kodlar ve basit bir başlangıç uygulaması yer almaktadır.

1.QT Creator

          QT Creator bizim C++ ile görsel arayüz tasarımı yapabileceğimiz son derece şık kullanışlı ve açık kaynak kodlu bir programdır. Aşağıdaki linkten resmi web sayfasına gidebilir ve bu programı indirebilirsiniz veya Software Center dan direkte yükleyebiliriz.


          Linux için olan sürümü indirip direk çift tık ile next next diyerek programı kolayca kurabiliriz. Kurulumdan sonra terminali açıp aşağıdaki komutu çalıştıralım.

sudo apt-get install libgl1-mesa-dev

          Bu yukarıdaki komut derleme için gerekli kütüphaneleri yükler. Bu kütüphaneler yüklü değilse kodunuz büyük ihtimalle derlenmeyecektir.

2.Kullanılabilir Kaynaklar

          Programı çalıştırdığımızda açılış ekranının sağ üst tarafındaki Examples ve Tutorials kısımlarına göz atabiliriz. Examples kısmında oldukça fazla örnek bulunmakta , bunlardan herhangi birisine tıkladığımızda uygulamanın açıklaması , kullanılan kütüphaneler ve kaynak kodlarına erişebiliyoruz. Tutorial kısmında ise gördüğümüz gibi videolar mevcut. Ancak bunlar yeterli değil birde açıklamalı kitap lazım diyorsanız google book ta oldukça kaynak mevcut. Ancak aşağıdaki kaynağı özellikle tavsiye ederim , çünkü hem uygulama ağırlıklı hem de kitabın belli bir kısmı Türkçe çevirisi internette mevcut. Bu bahsettiğim kitabın adı ve yazarı aşağıda bulunmaktadır. Hemen altındaki ise türkçe çevirisinin bulunduğu site.

1.C++ GUI Programming with Qt4 , Yazar: Jasmin Blanchette,Mark Summerfield



3.İlk Uygulama

          New project diyerek Qt Gui Application seçip sonrada next next ile projemizi oluşturup kodlamaya başlayabiliriz. Projenin bulunduğu klasör aşağıdaki gibi;



          Burada mainwindow.ui ye çift tıklayarak açalım. Aşağıdaki gibi penceremiz , widget , properties gibi son derece şık olan tasarım ekranımız açılıyor.



          Bundan sonrası ise çok kolay. Sürükleyip bırakarak artık istediğmiz uygulamaları yapabiliriz. Bu ilk örnek olduğu için sadece buton ve label ekliyorum. Amaç eventların nasıl kullanıldığını anlamak. Butona bastığımızda label da istediğimiz yazının gözükmesini sağlayalım.

          Buton ve Label ekledikten sonra label ı seçip properties ten Text kısmını siliyorum. Daha sonra butona sağ tık ve Goto Slot seçeneğini seçiyorum. Görüldüğü gibi buton için kullanabileceğim birçok event karşıma geliyor. Buradan clicked( ) seçip kod kısmına geçiyorum. Dikkat edersek eğer mainwindow.cpp ye geçiş yaptık. Burada label'a istediğimiz text ifadesini yazdırmak için

ui->label1->setText("İlk Örnek");

yazıyorum. Burada ui ile mainwindow a label ile Label ımıza (burada eklediğimiz label a otomatik verilen isim ,label eklerken properties kısmında farklı isimlerde kullanabilirdik.) , setText() ise adındanda anlaşıldığı gibi metin düzenleyen fonksiyon. Uygulama bu kadar Run edip deneyebilirsiniz.

          Tek satır ile yaptığımız ilk örneğin kodu aşağıdaki gibi oldu;

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_pushButton_clicked()
{
    ui->label1->setText("İlk Örnek");
}




           Qt oldukça şık ve kullanmak insanı mutlu ediyor. Diğer bir önemli noktası ise derlediğiniz dosya Linux üzerinde çift tıklama ile sorunsuz çalışıyor.(Deneyebilirsiniz)


5 Haziran 2014 Perşembe

Linux File System



Linux File System

         Aşağıda sistem klasörlerinin bir kısmının tanımı yer almaktadır.

Dosya adı
Dosya Tanımı
/bin
Binary nin kısaltması olup sistemde kullanılan temel programların (bash , ls , mount , tar ...)binary dosyaları tutulur
/boot
Adındanda anlaşılabileceği gibi boot dosyalarını bulundurur.
/dev
Device ın kısaltması olup bilgisayar donanımı ile ilgili belgeler burada bulunur
/etc
Sistem kofigrasyon dosyaları burada bulunur
/home
Bu dizinde kullanıcıların kişisel verilerinin bulunur
/lib
Library nin kısaltması olup bu dizinde kernel(çekirdek) modülleri ve sistemde kullanılan kütüphaneler bulunur
/proc
Process in kısaltmasıdır ve bu dizinde çekirdekte uygulanan proseslerin bilgileri tutulur
/root
Superuser
/sbin
System binary nin kısaltmasıdır ve bu dizinde sistemin düzenli çalışması için gerekli binary dosyaları bulunmaktadır
/tmp
Temprorary files
/usr
Kullanıcı tarafından yüklenen uygulamalar gibi veriler bu dizinde saklanır
/usr/bin
Çoğu kullanıcı programı burada tutulur
/usr/include
Sistemde kulanılan C kütphaneleri burada bulunur
/usr/game
Bilgisayardaki oyunlar burada bulunur
/usr/share
Tema , icon , arkaplan resimleri gibi veriler bu dizinde tutulur
/usr/src
Programların kaynak kodları burada bulunur
/media
Bilgisayara bağlı aygıtların bilgileri burada tutulur(flash bellek gibi)
/cdrom
Bilgisayayra takılan CD/DVD bilgileri yer alır
/dev
Bilgisayarın harddisk hakkındaki bilgiler burada tutulur
/var
Variable data , mail , yazıcı gibi bilgiler burada tutulur


Linuxta kullanılan karakterler ve işlevleri


/
Directory Seperator . Hedef klsaörlerin başında mutlaka bulunmalıdır
.
Gizli dosya vwe klasörlerin başında nokta bulunur
~
Home dizinini temsil eder
*
Arama işlemlerinde kullanılır. Örneğin “ls d*” Home klasöründeki d ile başlayan dosya ve klasörleri gösterir
?
Üstteki yıldız birden çok karakteri temsil ederken soru işareti tek bir karakteri belirtir. Örneğin “ls denem?.txt” komutu Home klasöründe “denem” ile başlayan ve txt uzantılı dosyaları gösterir.(varsa tabi ki)
[ ]
Komularrın içerisinde [0-9] veya [A-Z] gibi aralıklar belirtmemizi sağlar.
|
Pipe işareti birden fazla komutu birarada vermemizi sağlar. Örneğin “ls | head -10”
komutu Home dizinindeki ilk 10 dosya veya klasörü gösterecektir.
>>
Bu komut ile yazdığımız metni dosya içerisine atabiliriz. Örnek : “echo “deneme” >> deneme.txt” deneme.txt içerisine deneme yazar ve Home dizinine kaydeder.


Aşağıda ise Linux terminal komutlarına biraz daha detaylı bakalım.

Tab ile yazabileceğimiz komutları görebiliriz. Örneğin terminale “c” yazıp iki kere Tab tuşuna basın! Çok fazla sayıda komut varsa eğer size hepsini göstermek için (y or n) şeklinde uyarı verir. Ayrıca Tab tuşu komutun bir kısmını yazmış iseniz otomatik olarak tamamlayacaktır.

apropos ile komutların devamında ne kullanabileceğimizi görebiliriz. Örn: apropos head

whatis ile komutun ne iş veya işler yapabileceğiniz görebiliriz. Örn: whatis grep

İnfo ile komutun derinlemesine anlatıldığı Doküman açılır. Q veya Control+C ile bu dökümandan çıkılır.

Lpr (line printer) dosyaları yazdırır.

lpq yazdırılacak kuyruğu gösterir.

grep string ifade aramaya yarar. Örn: grep "d" dene.txt

head dosyada yazılı bulanan metnin baş kısmından bir parça gösterir. (head -6 , head -1 şeklinde de kullanılabilir. Bunlar satır sayısını temsil eder. ) Örn : head -3 dene.txt

tail dosyada yazılı bulunan metnin son kısmını gösterir (tail -5 , tail -2 şeklinde de kullanılabilir)

sort dosyadakileri sıralı bir şekilde ekrana getirir. Örn : sort dene.txt

uniq benzersiz satırları getirir. Aynı satırdan iki veya daha fazla ise bir tanesini gösterir.

diff (difference) iki dosyayı karşılaştırır.

file ile yanında belirilen dosyanın bilgilerini verir.

date +"%d %B %A"

bzip2 dosya ve klasörleri “.bz” formatında sıkıştırır. bunzip2 ise dosyayı zip içerisinden çıkartır.

gzip dosya ve klasörleri “.gz” formatında sıkıştırır

tar dosya ve klasörlerimizi “.tar” şeklinde sıkıştırmamızı sağlar. Örn: tar -cvf dosya_adi tar dosyası oluşturur. Buradaki -c (create) , -v (verbose) , -f (write to or read from a file) dır. Tar dosyasını açmak içinde tar -xvf dosya_adi.tar komutu ile açabiliriz. Ama genelde Linux'ta dosyalar “.tar.gz” şeklinde arşivlendiği için bu tarz bi arşivi tar -xvzf dosya_adi.tar.gz komutu ile açabiliriz. Buradaki -z “.gz” arşivini açmak içindir.


Which dosya konumunu belirtir.

wheris bulunduğu dosya konumunlarını belirtir.

finger sistemdeki kullanıcıları listeler (sadece 'w' ve 'who' komutuda aynı işi yapar)

pwd bulanan dizini gösterir(şuan ki)

Mkdir dizin oluşturur (-p ile birden fazla dizin ekleyebiliriz dene/denedim/oldu gibi)



rmdir dizin siler (-p ile birden fazla dizin silebiliriz dene/me gibi)



ls -l ile dosya dizilerini , boyutunu , kimin oluşturduğunu , hangi grupta bulunduğunu , hangi tarihte oluşturulduğunu görebiliriz izinler sırası ile owner , group , other şeklinde sıralanmaktadır. Ayrıca listedeki dosya ve klasörler sıralı bir şekilde gelmektedir.



chmod ile erişim izinlerini değiştirebiliriz. Örn: chmod +x simple burada simple çift tıklama ile çalıştırılabilir hale getirilmektedr.



wc -w ile kelimeleri sayabiliriz. Örn: ls -l | wc -w deneme.txt




          Birçok komut yazdık öğrenelim diye ama her seferinde tekrar tekrar yazıyoruz ve komutlarımız yine uçup gidiyor. Bunun içinde bir çözüm var elbette. Öncelikle terminale “script” yazalım scprict started yazısını gördükten sonra istediğimiz komutu yazalım yani normal çalışmamıza devam edelim. Burada yazdığımız her komut ve çıktısı kayıt altına alınıyor. Son olarak “exit” komutu ile script i tamamlayalım. Bizim için otomatik olarak Home dizinine typescript adında bir dosya oluşturuyor. İşte dosyada bizim yazdığımız komutlar kayıt altına almış olduk. Bu komutları tekrar terminalde görebilmek için “tcat ypescript” komutu vermemiz yeterli olacaktır.