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

Benzer belgeler
Android Ders Notları

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ü

Proje 1. Arayüz Tasarımı

EKLEME SORGUSU. 2) ornekveritabani.accdb isimli veritabanınızı çift tıklayarak açınız. Sorarsa, İçeriği Etkinleştir komutunu uygulayınız.

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

Microsoft FrontPage Web Sitesi Hazırlama. Ögr.Gör.N.Nilgün Çokça

BİLGİSAYAR PROGRAMLAMA. Yrd. Doç. Dr. Beytullah EREN

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

C# ile e-posta Göndermek

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

Microsoft FrontPage Web Sitesi Hazırlama. Ögr.Gör.N.Nilgün Çokça

Java Programlamada Paket Yapısı Ve Import

Bolum 9. Konu Başlıkları

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

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

Qt Temelleri. Eren BAŞTÜRK.

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java Programlamaya Giriş

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

Hukuk Parter ile SMS Yönetimi

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

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Şimdi başka bir problem üzerinde çalışalım.

BU CİHAZ BİLGİSAYAR BAĞLANTILI SİSTEM OLMAYIP, BAĞLI OLDUĞU BİLGİSAYAR İLE DEVAMLI İLETİŞİM YAPMAMAKTADIR. Mali Onaylı Yazarkasa

UYAP VERİ AKTARMA İŞLEMLERİ

Gerekli bağlantıları yapıp, ACS420 V3.03 programını çalıştırınız. Program açıldığında, LMS14 ün içindeki parametrelerin okunmasını bekleyiniz.

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Kullanım Kılavuzu

7 Temmuz Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar

Dokuz Eylül Üniversitesi Bilimsel Araştırma Projeleri Koordinasyon Birimi SATINALMA TALEBİ NASIL YAPILIR

Top level widget. 1 Kaynak kodları yazarken widgetlerin özgün (original) adlarını kullanmak zorundayız.

AEGEE-Eskişehir Online Web Yönetim Paneli ( WEBBY ) Yardım Dökümanı

Kişisel Web Sayfası Tasarım Sistemi


BLGM 354 DENEY 1 * GİRİŞ

Microsoft Excel. Çalışma Alanı. Hızlı Erişim Çubuğu Sekmeler Başlık Formül Çubuğu. Ad Kutusu. Sütunlar. Satırlar. Hücre. Kaydırma Çubukları

Microsoft PowerPoint

TAKSİ-DURAK MÜŞTERİ TAKİP PROGRAMI

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

NAZMİYE DEMİREL ORTAOKULU BİLİŞİM TEKNOLOJİLERİ DERSİ 1. DÖNEM 6. SINIFLAR DERS NOTU EXCEL 2007 DERS NOTLARI

KOD PARÇACIKLARI 1 / 5

Mobil Uygulamalarda Güvenlik Denetimi

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

Eğitmen. Öğretmen/Eğitmen.

HSancak Nesne Tabanlı Programlama I Ders Notları

HESAP MAKİNASI YAPIMI

24 Kasım 2011 / Perşembe

Resim 1. Access açılış sayfası. Resim 2. Access veri tabanı düzenleme sayfası

7) Çoklu Formlar. Şekil7.1. Araç kutusundaki Add Form butonuna basarak projeye yeni bir form ekleyiniz.

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

TEMEL BİLGİSAYAR. Ders Notları. Yrd. Doç. Dr. Seyit Okan KARA

İÇERİK YÖNETİM SİSTEMİ KULLANMA KILAVUZU

Mevlana Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi (MEVUZEM) MYENOCTA Uzaktan Eğitim Sistemi Öğrenci Kullanım Kılavuzu

Açılan pencerede tarafınıza iletilen kullanıcı adı ve şifre ile oturum açabilirsiniz.

Genel Programlama II

HACETTEPE ÜNİVERSİTESİ KABLOSUZ AĞ ERİŞİM SİSTEMİ KABLOSUZ AĞ İÇİN 802.1X YÜKLEME VE YAPILANDIRMA TALİMATLARI (WINDOWS VISTA SÜRÜMLERİ İÇİN)

Qt ile Bir Ağ Uygulaması

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

YZM 2105 Nesneye Yönelik Programlama

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

Kabuk Programlama (Bash)

E-P0STA ADRESLERİNİ REHBERE KAYDETME VE GRUPLAMA

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri

ASP.NET ile Bir Web Sitesi Oluşturma

UZAKTAN ÖĞRETİM SİSTEMİ ORYANTASYON EĞİTİMİ BŞEÜ CANLI DERS SİSTEMİ

AMACSEO TEMASI KULLANIM KILAVUZU. AmacSeo temasının Amacdizayn.com tarafından hazırlanmış kullanım kılavuzudur. 1

BM 102 Bilgisayar Programlama II. Windows Form Application

4006 Bilim Fuarı Proje ve Sonuç Bilgileri Aşaması Başvuru Adımları

Harita Güncelleme MODEL. - Model ; DAİİCHİ üniteye sahip olan TÜM modeller PROSEDÜR. 1. Öncelikle bilgisayarınızdan

Kaynak Kodlardan Derleme. Turquaz Muhasebe. Versiyon 0.2. Hüseyin Ergün. 26 Mart 2005

Bloglar için en çok tercih edilen düzen 1.düzendir. Yani En son yazılarımın listesi. Sizlerde ödeviniz için bu düzeni seçebilirsiniz.

ZİRVEDRİVEWEB YAZILIMI KULLANIM KILAVUZU

Nesneye Dayalı Programlama Laboratuvarı

Toplu Kayıt Kullanıcı Kitapçığı

GtkD ile Görsel Programlama

BİL-142 Bilgisayar Programlama II

MyEnglishLab: Speakout Öğrenci Kayıt Kılavuzu

Uyapı Veri Aktarma İşlemleri

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

Zoru Kolay Yapmak İçin...

Word Otomatik Düzelt

NB Macro Kullanımı Hakkında Genel Bilgiler

B03.10 Algoritmalari Uygulamak : Durum 3 (Yuvalı Kontrol Yapıları) Şimdi başka bir problem üzerinde çalışalım.

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir.

MEB E-Posta Hizmetleri ve Outlook Programı

DYNED RECORDSMANAGER RESİMLİ KULLANIM KILAVUZU (GRUP VE EĞİTMEN ŞİFRELERİ)

CAEeda TM ONERA M6 KANADI NAVIER-STOKES ÇÖZÜMAĞI OLUŞTURMA VE ÖNİŞLEM. EDA Tasarım Analiz Mühendislik

DİKEY GEÇİŞ İNTERNET BAŞVURU KILAVUZU

için kayıt kılavuzu

Bo lu m 7: Hesap Tabloları

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

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

KELİME İŞLEMCİ MİCROSOFT OFFİCE WORD KULLANIMI

Temel Bilgisayar Programlama

Harita güncelleme direktifleri

1. TANIMLAR 1.1 Laboratuvarım

2. SCADA PROGRAMI. TEOS' un size sunduğu bir çok hizmet içerisinde en önemlilerini şöyle sıralayabiliriz:

Bu sayfa şifre hatırlatma sayfasıdır. Öğrenci numarası ve ön kayıt başvurusu sırasında girdiğiniz e- posta ile şifrenizi isteyebilirsiniz.

ZİRVEDRİVE IOS YAZILIMI KULLANIM KILAVUZU

Transkript:

Qt Pencereleri Kaya Oğuz <kaya@kuzeykutbu.org> Bu belge ve içerisindeki kodlar GPL lisanslıdır. Pencere var, pencere var Daha önce okumadıysanız, belgeler sayfasından tekrar bir Qt'ye Giriş belgesine bakın. Orada pencerelere bir giriş yapmıştık. Ben burada yine bir özet geçeceğim. Grafik kullanıcı arayüzü programlamada TOP_LEVEL_WINDOW ya da MainWindow olarak geçen esas pencereler vardır. Bu pencereler, bu belgeyi okuduğunuz internet tarayıcısı gibi programların "ana" pencereleridir. Bu pencere içinde bütün işlemler olur ve genelde bu pencereyi kapattığınızda program da kapanıverir. Diğer pencerelere Dialog Window deniyor, aynı şekilde Diyalog pencereleri olarak çevirebiliriz. Diyalog penceresi, adından da anlaşılacağı gibi bizimle kısa bir etkileşime girip kapanan pencerelerdir. Bunlara örnek menüden Dosya ve arkasından Aç dediğimiz zaman çıkan "Dosya Açma" penceresi. Burada işinizi gördükten sonra program kaldığı yerden devam eder. Bu diyalog pencereleri de kendi aralarında ikiye ayrılırlar. Bunlardan ilki, Modal denen ve pencere işini bitirene kadar alttaki pencerelere erişime izin vermeyen pencerelerdir. "Dosya Aç" pencereleri genelde bu şekildedir. Diğerleri ise açıkken diğer pencerelere bir kısıtlama getirilmez. Bunlara da Modeless ya da Non-Modal pencereler denir. Örneğin bir metin düzenleyicideki "Ara" penceresi gibi. Bu Ara penceresi bir kelimeyi ya da ifadeyi ararken alttaki ana pencerede düzenlemeye izin verir... Şimdi pencerelerle nasıl baş edeceğimizi öğrenelim. Designer Dosyaları Pencere tasarımı vs. işlemler için elle kod yazmanıza gerek yok. Designer denen araçla istediğiniz arayüzü hazırlayıp kaydedin. Uzantısı "ui" olan bu dosyalar basit birer XML dosyalarıdır. Qt'nin bizden habersiz çalışan uic (ui compiler, daha doğrusu user interface compiler) komutu bu XML dosyasını bir başlık, yani header dosyasına dönüştürür. Bunu elle yapabilirsiniz, yani komutu verip bir header dosyası alabilirsiniz. Ama bunun yerine qmake kullanarak proje yönetimi ile beraber gitmeniz tavsiye edilir. Böylece bu dosyalarınız qmake tarafından otomatik olarak algılanıp uic'den geçirileceklerdir.

Designer ile üç tür pencere yaratabilirsiniz: Ana Pencereler (MainWindow), Diyalog pencereleri (Dialog) ve parçacıklar (Widget)... Ana pencere ve diyalog pencerelerini az çok biliyorsunuz ama parçacıklar ne işimize yarayacak? Parçacıkları dinamik sekme yaratmada kullanacağız. İlerleyen konularda değineceğiz :) Orta ve küçük ölçekli programlarınız genelde bir ana pencere ve onun etrafında çalışan diyalog pencerelerinden oluşur. Bu yüzden öncelikle ana pencerenizi tasarlamanız ve yeni bir dizin altında kaydetmeniz, arkasından da ihtiyacınız oldukça diyalog pencerelerini yaratmanız izlenecek en olağan yollardan biridir. Var olan pencerelerle çalışırken qmake -project, qmake, make üçlüsünün sadece son adımını çalıştırmanız yetecekken, yeni bir pencere eklediğinizde sorun çıkabilir. Bunun için qmake üçlüsünden önce "make clean" diyerek ortamı temizleyin. Arkasından da Makefile ve ".pro" dosyanızı silin. qmake üçlüsünü tekrar edin ve tekrar sorunsuz derlenecektir. Mama Kin Mama Kin, Aerosmith'in güzel bir parçasıdır, Guns 'n Roses da "Lies" albümünde söyler bu parçayı. Sözlerinde "Keep in touch with mama kin" derler, yani annenizin akrabaları ile iletişimi koparmayın gibisinden. Ne alakası var derseniz, pencere yaratmak için torunlara ihtiyacınız vardır. Designer ile oluşturduğunuz ui dosyaları uic'den geçtikten sonra bir header dosyası oluyor demiştik. Bu header dosyalarının içinde QMainWindow'dan türetilmiş bir sınıf vardır. Bu sınıf Ui denen bir namespace altındadır. Şimdi yukarıda geçen türetilme, header, namespace gibi kelimeler size yabancı geliyorsa şöyle söyleyelim, o dosyanın içinde QMainWindow'un bir çocuğu var. Çocuk annesine pek benzemiyor, ondan daha renkli. Çocuğun da kendi bir çocuğu olunca daha da güzel olacak. İşte bu son çocuk bizimdir :) Biz uic'den geçtikten sonra oluşan header dosyasındaki sınıftan ve QMainWindow'un kendinden türeteceğiz penceremizi... #include <QMainWindow> #include "ui_pencere.h" class AnaPencere:public QMainWindow, Ui::MainWindow AnaPencere():QMainWindow() ; Burada pencere.ui dosyasından oluşacak olan ui_pencere.h dosyasını include ediyoruz önce. Kendi sınıfımızın adı AnaPencere ve bu sınıfı QMainWindow ile ui_pencere.h dosyasındaki Ui namespace'i altındaki MainWindow'dan türetiyoruz... Buraya kadar sorun yok. Ondan sonra kurucu (constructor) içinde, yine ui_pencere.h dosyasında Ui::MainWindow'un bir metodu olan setupui'yi çağırıyoruz, bu Designer'da oluşturduğumuz tasarımın yapılmasını sağlıyor. Tabii bu arada kurucuyu çağırırken, QMainWindow'un kurucusunu da çalıştırıyoruz (

AnaPencere():QMainWindow() ). İşte penceremiz hazır! Aynı Designer'da yarattığımız şekilde... Buna biraz işlevsellik kazandırmak istiyorsak biraz sinyal / slot ilişkileri kurmamız yeterli olacaktır. Dialog Pencereleri Tek pencere ile sınırlı kalmak elbette sıkıcı. Bu yüzden bu ana pencereye biraz sinyal slot ile yeni işlevler kazandırıp yeni bir pencere açtıralım. Hatta, pencereden değerler alıp kullanalım! Üstte ana pencereyi hiç göstermedik, ben size bir ekran görüntüsü sunayım: Figure 1. Pencere Demo Burada gördüğünüz üzere bir "Yeni Pencere" QAction'ımız var. Menüye yazdığınız her satır bir QAction oluyor :) Bunun dışında beyaz alan bir QListWidget. Yani bir liste... Şimdi "Yeni Pencere"ye tıklayacağız, arkasından bir pencere açılacak. Oraya bir bilgi gireceğiz, girdiğimiz bilgi de listeye eklenecek :) Kolay değil mi? Basit bile olsa aslında birçok işlem bu şekilde yapılıyor. QAction'ları doldurmadan önce, diyalog penceremizi tasarlayalım: Figure 2. Diyalog Demo Buraya kadar her şey normal. Ama bu iki pencere hala Designer'da açıkken, size bu pencerelerin isimlerini göstermek istiyorum: Figure 3. Designer'da Ana Pencere Özellikleri

Bakın, burada objectname olarak MainWindow duruyor. Bu, Ui::MainWindow ifadesindeki MainWindow. Şimdi diyalog penceremize bakalım: Figure 4. Designer'da Diyalog Penceresi Özellikleri Burada gördüğünüz gibi, bunun adı Dialog. Yani Ui::Dialog olacak. Ama birden fazla pencere kullanacaksanız bu isimler çakışacaktır. Bu yüzden, eğer çok form olacaksa bunlara yeni isimler vermeniz iyi olur. Burada başka penceremiz olmayacak, o yüzden öntanımlı bu değerler işimizi görecektir. Ama değiştirmek isterseniz, Designer'da pencerenin boş bir yerine sağ tıklayıp "Change Object Name" diyerek yeni ismi girebilirsiniz. Pekala, şimdi diyalog penceremizi kaydettik, diyalog.ui, şimdi bir temizlik yapalım (make clean) ve diyalog.h dosyamızı yazalım: #include <QDialog> #include "ui_diyalog.h" class dialog:public QDialog, Ui::Dialog dialog(qwidget *parent):qdialog(parent)

; Burada her şey sanki MainWindowdaki gibi. QMainWindow yerine QDialog'u ekledik, dikkat edin, bu sefer QDialog ve Ui::Dialog'tan türettik. Burada Ui::Dialog ifadesindeki Dialog, üstte ekran görüntüsündeki Dialog. Eğer onu formpencere yapsaydık, Ui::formPencere diyecektik ;) Bunun dışında dikkat etmeniz gereken bir diğer nokta QWidget *parent ifadesi. Diyalog pencerelerinin bir parent nesnesi olmalı. QMainWindow ve QDialog, QWidget'tan türedikleri için biz oraya bizim AnaPencere'yi koyacağız. QDialog'un kurucusu (constructor) da bu QWidget'ı alır :) Hemen hemen iki pencereyi de yarattık, ama bu pencereler nasıl açılacak. Elbette bu iş için ana pencereye biraz işlem yapmamız gerekecek. "Yeni Pencere" QAction'ını bir slot'a bağlayalım ve pencereyi açtıralım. Yeni anapencere.h'ımız şu şekilde: #include <QMainWindow> #include "ui_pencere.h" #include "diyalog.h" class AnaPencere:public QMainWindow, Ui::MainWindow AnaPencere():QMainWindow() connect(actionyenipencere, SIGNAL(activated()), this, SLOT(slotPencere())); ; public slots: void slotpencere() diyalog *yeni = new diyalog(this); yeni->exec(); Pekiii! Şimdi burada ne oldu? Öncelikle diyalog.h dosyasını include etmeyi unutmadık (tamam ilk başta unuttum gene, ama fark ettim hemen :) ) Ondan sonra "actionyenipencere"mizi, slotpencere denen hemen aşağıya yazdığım metoda bağladık. O metod napıyor peki? Basitçe diyalog denen sınıfımızdan (kendisi diyalog.h içindeydi) bir yeni pointer yaratıyor, adı yeni :) Bakın yaratırken new dialog(this) ifadesini kullandık. Yani this dediğimiz, bir QMainWindow gönderdik içine. O zaman ne oldu? Diyalog penceremiz ana penceremizin tam ortasında çıktı. Burada this yerine 0 ya da null derseniz ekranın ortasında çıkar. Ama pencereye ait diyalog pencerelerinin pencerenin ortasında çıkması daha iyidir :) Peki bu pencere hiçbir işlem yapmıyor. Belirdikten sonra Kaydet / iptal neye basarsanız basın kapanıyor. Amacımız neydi? O QLineEdit'e bir şeyler yazdırıp, QListWidget'a eklemek! O zaman size biraz QDialog'un yapabileceklerinden bahsedeyim. Bu iki düğme

Designer ile hazırlandığında iki tane Slot'a bağlılar aslında. Biri, Kaydet daha doğrusu, accept() denen slota bağlı, diğeri de, İptal yani, reject() denen slot'a bağlı. Bu iki slot QDialog'un slotları. Eğer kullanıcı Kaydet'e basarsa accept() slotu anapencere.h içindeki slotpencere() fonksiyonuna QDialog::Accepted değerini döndürüyor. Orada yeni->exec() herhangi bir değere eşitlenmemiş, ama eşitlersek durumu, yani kullanıcının accept / reject ettiğini öğrenebiliriz. Bütün dosya yerine değişen yer olan void slotpencere() metodunu tekrar inceleyelim: void slotpencere() diyalog *yeni = new diyalog(this); if (yeni->exec() == QDialog::Accepted) // demek ki kabul etmiş! Harika! accept() ifadesini artık kullanabiliyoruz, ama değeri nasıl alacağız? Eğer yeni->lineedit->text() gibi bir düşünceniz varsa böyle değil. Çünkü QDialog'un accept() ifadesinden sonra ona ulaşamıyoruz. Bunun yerine diyalog.h dosyasındaki sınıfımıza bir değişken daha ekliyoruz, adı QString yazilan: #include <QDialog> #include "ui_diyalog.h" class diyalog:public QDialog, Ui::Dialog QString yazilan; diyalog(qwidget *parent):qdialog(parent) connect(okbutton, SIGNAL(clicked()), this, SLOT(slotKaydet())); ; public slots: void slotkaydet() yazilan = lineedit->text(); Neler oldu şimdi? okbutton'u zaten bir slot'a bağlıydı hani? Evet, hala accept() slotuna bağlı. Ama biz onu bir de bu slot'a, slotkaydet()'e bağladık. Bu slot ile yazilan değişkenine lineedit içindeki metni aldık! Artık bunu void slotpencere() içinde kullanabiliriz: void slotpencere() diyalog *yeni = new diyalog(this); if (yeni->exec() == QDialog::Accepted) new QListWidgetItem(yeni->yazilan, listwidget); Vay! Ne kadar basitmiş! :) QListWidget'a yeni bir satır eklemek için bir

QListWidgetItem kullanıyoruz. Detaylı bilgi için Assistant'a bakabilirsiniz. Burada new ile aslında yeni bir pointer dönüyor ama ona ihtiyacımız yok, o yüzden bıraktık. yeni->lineedit'e ulaşamasak bile artık yeni->yazilan'a ulaşabiliyoruz ve işte listeye yazdığımız ifade eklendi. Burada elbette kontrolleri de yapmak lazım, mesela boş bırakmışsa "lütfen bir metin giriniz" vs. yazmak lazım değil mi? Onları da yapalım. O zaman ilk işimiz okbutton'dan accept() slot'unu kaldırmak olmalı. Bu iş için Designer'ı kullanabilirsiniz. Hemen oradaki SIGNAL SLOT EDITOR altında okbutton, clicked, Dialog, accept satırını seçip kaldırın. Kaydedin. Artık accept olayını kendimiz yazacağız. Tek yapmamız gereken daha önce yazdığımız slotkaydet() metodunun sonunda bir kontrol edip accept() ifadesini yazmak. slotkaydet() metodunu tekrar yazalım: void slotkaydet() if (lineedit->text() == "" lineedit->text() == QString::null) QMessageBox::critical(this, "Hata!", QString::fromUtf8("Lütfen boş bırakmayınız!")); return; yazilan = lineedit->text(); accept(); Burada, en başa, #include <QDialog> ifadesinden sonra #include <QMessageBox> eklemeyi unutmayın! Burada artık accept() slotumuz slotkaydet olduğu için güvenle kontrol ediyoruz lineedit->text() ifadesini. Eğer boşsa veya null ise bir hata mesajı verip dönüyoruz. Değilse, yazilan değişkenine yazıp, accept() ile işlemi bitiyoruz :) Artık bütün işlevleri yerine getiren basit ve etkili bir pencere / diyalog ikilimiz var, hayırlı uğurlu olsun! Sekmelerle ilgili yazıyı artık bir sonrakine anlatırım :) Bütün kaynak kodları belgeler sayfasından indirebilirsiniz.