Wujud Program yang Diinginkan

dokumen-dokumen yang mirip
Pemrograman Qt 4 QStackedLayout dan QComboBox untuk Window Layering

Pemrograman Qt 6 Membuat Program GUI Sederhana Menggunakan Sebanyak Mungkin Kelas (QStackedLayout, QPushButton, QLabel, QComboBox, dan Lainnya)

Pemrograman Qt 8 QVBoxLayout, QHBoxLayout, QGridLayout dan Sifat-Sifatnya

Pemrograman Qt 11 Phonon Framework untuk Memutar Audio OGG Ketika QPushButton Diklik

Pemrograman Qt 17 Pan, Scroll, Zoom, Flip, dan Rotate untuk QGraphicsView

Wujud Program yang Diinginkan

TIPS LATIHAN MEMROGRAM

Pemrograman Qt 19 Membaca dan Menuliskan Standard Output ke QTextEdit Secara Realtime

Pemrograman Qt 9 QProcess dan Menjalankan Perintah Linux

Pemrograman Qt 14 QPropertyAnimation untuk Animasi GUI

Pemrograman Qt 20 QSystemTrayIcon untuk Membuat Aplikasi System Tray

Pemrograman Qt 13 Logo Program dengan setwindowicon

Pemrograman Qt 18 QTextStream untuk Membuat Aplikasi Proxy Changer

Pemrograman Qt 10 QTextEdit, QFile, QTextStream, QLabel, Membaca Standard Output Shell, Membaca Berkas, dan Membuat Berkas TXT

Pemrograman Qt 12 Kalkulator Sederhana dengan QLineEdit dan Casting QString to int

BAB IV HASIL DAN PEMBAHASAN. Dalam pembuatan alat ini penulis menggunakan webcam dengan merk. Gambar 4.1 Webcam dengan merk creative

Pemrograman Aplikasi GUI dengan Framework Qt (5.0.1) Penulis: Zulhaj Aliyansyah

BAB VIII CLASS ABSTRACT & CLASS INTERFACE. //abstract class bisa, kelas biasa bisa System.out.println("Ini nama");

Perkenalan Pemrograman GUI di Linux dengan Qt Framework dan Bahasa C++ Ade Malsasa Akbar

MODUL 10 Fungsi 10.1 Kompetensi 10.2 Alat Dan Bahan: 10.3 Ulasan Teori: Dasar Fungsi Deklarasi Fungsi

Pemrograman Dekstop Pulut Suryati

Bab I Pengenalan Visual BASIC

Kurikulum Qt. Chapter 4 Function. Fungsi

BAB IX LINKED LIST (SENARAI BERANTAI)

Parent dan Child di Java

LAB02 : KODING PROGRAM

Bahasa C. Dosen : Dhamayanti

MODUL I PENDAHULUAN. Modul I : Pengenalan Visual Basic 1

Tabel 1. Instruksi untuk menampilkan teks No. Bahasa Pemrograman Instruksi 1. Pascal WRITE ( Bahasa pemrograman itu mudah );

Object Oriented Programming LOGO

PENGENALAN BAHASA C. A. Struktur Kode Program dalam Bahasa C Secara garis besar, suatu kode program dalam bahasa C memiliki struktur umum seperti ini:

Sebagai contoh misalnya akan dibuat kelas turunan Silinder dari kelas dasar Lingkaran, maka dapat dituliskan :

Kurikulum Qt. Chapter 5 Pointer dan References. Agenda. Apa itu Pointer? Memory Komputer. Mengambil Alamat Memory dari Variabel

Writting Procedure and Function

BAB 8 Argumen dari Command-line

PEMROGRAMAN VISUAL BASIC

MEMBUAT KELAS SENDIRI. Dewi Sartika, M.Kom

Dwiny Meidelfi, M.Cs

PEMROGRAMAN PHP DASAR

BAB III METODOLOGI PENELITIAN. Ketika alat dihidupkan maka LCD, Raspberry Pi dan IR LED akan menyala.

Kurikulum Qt. { Basic OOP } Chapter 4. Function

Bab 6. Layer Manager

MODUL IV PROCEDURE. [Private public static]sub namaprosedur (daftarargumen) End Sub

Inheritance dan Polimorfisme

BAB IV IMPLEMENTASI DAN PENGUJIAN

BAB 7 Kondisi Form 7.1. Pada Saat Form Load 68 Atep Ruhiat

BAB 8 Argumen dari Command-line

MODUL III PILIHAN RadioButton dan RadioGroup

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception? Menuliskan exception sebagai start method

Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum

Preliminary Test Axioo Class Program

FUNCTION (FUNGSI) LOGO. Pendidikan Teknik Elektronika FT UNY. Muh. Izzuddin Mahali, M.Cs.

PEMROGRAMAN JAVA. Yoannita, S.Kom. Class & Method sederhana Konsep Pemrograman Berorientasi Objek. Company LOGO

TATA CARA PENGISIAN FORM REGISTRASI

MEMBUAT OBJECT 3D DENGAN EXTRUDE. Sebuah Ducting dengan dimensi seperti pada gambar 1. Langkah kerja pembuatannya:

CONTOH SOAL. 1. Action script yang tepat pada blank {Soal 1} untuk tombol sehingga property alpha movie clip gbr menjadi 50% adalah.

Tiga Metode Sangat Penting dalam Pemrograman Java Bagi Pemula

DAFTAR ISI DAFTAR ISI... 1 BAB I Halaman Awal Proses Registrasi Login Pendaftar... 5 BAB II... 8 PROSES PERIJINAN...

Pertemuan ke-3. Statemen input/output Struktur Kontrol Keputusan

Tutorial A Menggambar Bendera Merah Putih Pada Frame

STRUKTUR DENGAN ARRAY DAN FUNCTION

DASAR PEMROGRAMAN. Konsep Pemrograman Berorientasi Objek. Yoannita

MODUL 7 CRUD (CREATE, READ, UPDATE,DELETE) dibawah ini adalah fungsi PHP yang akan digunakan untuk pembuatan CRUD

Bab 10 Pemakaian Frame

BAB III ANALISA DAN PERANCANGAN

Variabel dengan tipe dasar hanya dapat menyimpan sebuah nilai

URAIAN POKOK PERKULIAHAN

5.1 Pelajaran: Menggunakan Map Composer

Inheritance dan Kata Kunci static

Preliminary Test Axioo Class Program

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

PEMROGRAMAN BERORIENTASI OBJEK

PENGENALAN C++ Bab 1

EXCEPTION. 2. Pada kondisi bagaimana klausa finally tidak akan dieksekusi? Kode didalam block try memiliki statement return

Pendidikan Teknik Informatika Universitas Negeri Malang

Modul 4: Lebih Dalam lagi tentang Class, Objek dan Method

MODUL PRAKTIKUM 1 DASAR VISUAL BASIC 6.0

Tutorial ini akan menjelaskan dengan singkat cara menggunakan JNI, dan cara membuat kode Java yang menggunakan JNI.

Dasar-Dasar OOP di Java

AP2B Dini Triasanti STRUKTUR PEMROGRAMAN PYTHON

Gambar 1. Tampilan Layar Sebuah Program Animasi

Menggunakan CodeBlock Dengan Cepat (platform non linux) Oleh:wijanarto

MODUL 1 Alur Seleksi dengan C++

Tutorial Cara Membuat Logo Transtv di CorelDraw

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Yoannita

MODUL VI PROSEDUR. Secara garis besar ada dua keuntungan yang bisa diperoleh dari pemakaian prosedur, yaitu:

Variabel tersebut seharusnya bisa dideklarasikan didalam try block dan block catch

TUTORIAL DASAR C++ BELAJAR C++ DARI NOL. Nor Kandir. Lab B201 - Teknik Elektro ITS Surabaya

ilmu bahasa pemrograman ilmu c++ Copyright izie ilmu c++

Bab 5. Dasar-dasar Action Script

MICROSOFT VISUAL FOXPRO

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK AMIKOM YOGYAKARTA

Bagian I - Siswa. A. Kuis Online

Modul Visual Basic 6.0

Waktu Sisa : 0:43:4. Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum. Mengerjakan finally. Diluar block

Sekarang, kita akan mencoba untuk menganalisa program Java pertama : public class Hello {

MODUL PEMOGRAMAN WEB II STMIK IM BANDUNG MODUL PEMOGRAMAN WEB II. Oleh: CHALIFA CHAZAR. Chalifa Chazar edu.script.id

Pemrograman Berorientasi Objek Dengan PHP5

Algoritma Pemrograman 2B (Pemrograman C++)

Transkripsi:

Pemrograman Qt 5 QStackedLayout dan QPushButton untuk Layering (setcurrentindex) Bismillahirrahmanirrahim. Tulisan ini adalah bentuk PDF dari http://malsasa.wordpress.com/2013/08/20/pemrograman-qt-5- qstackedlayout-dan-qpushbutton-untuk-layering-setcurrentindex/. Satu bulan saya mencari cara mengganti layer (bahasa teknisnya mengganti indeks dari QStackedLayout) dengan klik pada QPushButton. Kemarin maksimal baru bisa berganti dengan QComboBox. Alhamdulillah, penantian itu usai dan saya senang sekali. Mengapa? Karena jika ini sudah berhasil dilakukan, maka semua proses pengerjaan program yang saya inginkan akan lancar insya Allah. Bagaimana lagi? Program saya sebetulnya hanya berisi hal ini nantinya. Sekarang saatnya saya beberkan programnya. Wujud Program yang Diinginkan Penjelasan: pokoknya, tampilan program harus berubah menjadi tampilan lain jika diklik tombol. Di sini, ada frame-frame yang ditumpuk jadi layer. Kalau tombol 1 diklik, maka frame 1 tampil di atas sedangkan frame 2 di bawah. Sebaliknya pula demikian. Ini yang saya sebut layering.

Daftar Kelas Qt yang Dipakai 1. QVBoxLayout 2. QFrame 3. QPushButton 4. QStackedLayout (primadona tulisan ini) 5. QLabel Daftar Method Qt yang Dipakai 1. addwidget 2. setlayout 3. addlayout 4. setcurrentindex (primadonanya primadona ini) 5. stacksatu 6. stackdua 7. setframeshape 8. setframeshadow 9. setfixedsize Qt Creator dalam Kode mainwindow.cpp

mainwindow.h Kode Program mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtGui> class Dialog : public QDialog Q_OBJECT public: Dialog(); QVBoxLayout *layoututama; QVBoxLayout *layouta; QVBoxLayout *layoutb; QFrame *framea; QFrame *frameb; QStackedLayout *stackia; QPushButton *tombola; QPushButton *tombolb; QPushButton *tombolpengatur; QPushButton *tombolpengutar; QLabel *labela;

QLabel *labelb; public slots: void stacksatu(); void stackdua(); private: }; #endif // MAINWINDOW_H

mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" Dialog::Dialog() layoututama = new QVBoxLayout; layouta = new QVBoxLayout; layoutb = new QVBoxLayout; framea = new QFrame; frameb = new QFrame; stackia = new QStackedLayout; labela = new QLabel("FRAME 1"); labelb = new QLabel("FRAME 2"); tombola = new QPushButton("1"); tombola->setfixedsize(88,88); tombolb = new QPushButton("2"); tombolb->setfixedsize(66,66); tombolpengatur = new QPushButton("SATU"); tombolpengatur->setfixedsize(88,33); tombolpengutar = new QPushButton("DUA"); tombolpengutar->setfixedsize(88,33); layouta->addwidget(labela); layouta->addwidget(tombola); framea->setlayout(layouta); framea->setframeshape(qframe::styledpanel); framea->setframeshadow(qframe::raised); layoutb->addwidget(labelb); layoutb->addwidget(tombolb); frameb->setlayout(layoutb); frameb->setframeshape(qframe::styledpanel); //shape = styledpanel frameb->setframeshadow(qframe::raised); //shadow = raised stackia->addwidget(framea); stackia->addwidget(frameb); layoututama->addlayout(stackia); addlayout layoututama->addwidget(tombolpengatur); layoututama->addwidget(tombolpengutar); //bukan addwidget tetapi setlayout(layoututama); connect(tombolpengatur, SIGNAL(clicked()), this, SLOT(stacksatu()));

connect(tombolpengutar, SIGNAL(clicked()), this, SLOT(stackdua())); } void Dialog::stacksatu() stackia->setcurrentindex(0); } void Dialog::stackdua() stackia->setcurrentindex(1); } Analisis Kode Program HEADER Kali ini saya tidak bisa mengabaikan HEADER begitu saja. Berkas mainwindow.h menjadi penting pada program ini. Mengapa? Ini berkaitan dengan slot dan fungsi yang dipakai. Pada berkas ini, yang paling penting yang harus diperhatikan adalah deklarasi. Lihat, deklarasi objek-objek ini sangat penting dan harus ada: QVBoxLayout *layoututama; QVBoxLayout *layouta; QVBoxLayout *layoutb; QFrame *framea; QFrame *frameb; QStackedLayout *stackia; QPushButton *tombola; QPushButton *tombolb; QPushButton *tombolpengatur; QPushButton *tombolpengutar; QLabel *labela; QLabel *labelb; Ingat, mereka harus dideklarasikan dalam mainwindow.h. Mereka harus ada di bawah lingkupan public:. Jangan dipikirkan antara nama tombol pengatur dengan pengutar. Sama saja. Yang penting lagi, bahkan paling pentingnya adalah ini: public slots: void stacksatu(); void stackdua(); Mengapa penting? Karena dua buah slot ini akan dipakai untuk menggerakkan QStackedLayout supaya mengubah indeksnya. Alias, ganti tampilan. Dan slot ini harus dideklarasikan di lingkup public slots:, tidak bisa ditaruh pada private karena slot ini berjalan antarfungsi. Kalau dibuat private, maka ia hanya

berjalan di dalam satu fungsi yang sama. Yang dimaksud antarfungsi adalah fungsi besar Dialog(), stacksatu/stackdua itu sendiri, dan fungsi khusus setcurrentindex() milik objek QStackedLayout yang semuanya ada di dalam mainwindow.cpp. Intinya, yang diinginkan dengan ini adalah, jika ada tombol diklik maka fungsi stacksatu() dipanggil, dan di dalam fungsi stacksatu() tersebut dipanggillah fungsi setcurrentindex(). Perhatikan, objek QStackedLayout berada di dalam fungsi Dialog(), tidak di dalam stacksatu(). Ini hanya bisa dilakukan jika stacksatu bertipe public. Demikian juga dengan stackdua(). Oh iya, pada program kali ini, area private: dibiarkan kosong. Sudah, jangan dipikirkan. CPP Khusus untuk mainwindow.cpp, ada sesuatu yang sangat berbeda dengan 4 tulisan Qt sebelumnya. Apa yang beda? Deklarasi objek-objek yang dipangkas. Lihat: layoututama = new QVBoxLayout; layouta = new QVBoxLayout; layoutb = new QVBoxLayout; framea = new QFrame; frameb = new QFrame; stackia = new QStackedLayout; labela = new QLabel("FRAME 1"); labelb = new QLabel("FRAME 2"); tombola = new QPushButton("1"); tombola->setfixedsize(88,88); tombolb = new QPushButton("2"); tombolb->setfixedsize(66,66); tombolpengatur = new QPushButton("SATU"); tombolpengatur->setfixedsize(88,33); tombolpengutar = new QPushButton("DUA"); tombolpengutar->setfixedsize(88,33); Yang sangat perlu diperhatikan adalah pergantian pola dari: QNamaKelas *namaobjek = new QNamaKelas; menjadi bentuk deklarasi objek yang terpangkas demikian: namaobjek = new QnamaKelas; Perhatikan. Deklarasi awal QNamaKelas tidak dipakai lagi. Juga tidak dipakai lagi tanda pointer (*). Langsung ditulis nama objek yang diinginkan lalu tetap ditulis nama kelas di akhir deklarasi (sebelah kanan tanda = ). Mengapa dipakai deklarasi model begini? Karena kita sudah mendeklarasikan secara umum pada header. Dan karena saya kemarin satu bulan memakai pola yang pertama untuk deklarasi dalam mainwindow.cpp ini, satu bulan pula saya gagal mengerjakan kode ini. Setelah diganti dengan deklarasi baru ini, dan ditambahi sedikit kode, alhamdulillah berhasil.

Yang paling penting dari berkas CPP kali ini adalah kode connect ini: connect(tombolpengatur, SIGNAL(clicked()), this, SLOT(stacksatu())); connect(tombolpengutar, SIGNAL(clicked()), this, SLOT(stackdua())); Inilah kunci dari berkas CPP ini, yang satu bulan saya cari kode yang benarnya bagaimana. Ternyata beginilah menulis kodenya. Inti kode di atas adalah objek, SIGNAL(fungsi()), objek, SLOT(fungsi()) yang diterjemahkan dalam konteks program 5 ini menjadi tombol, SIGNAL(clicked()), this, SLOT(stacksatu()) Maksud this adalah kelas yang tulisan this ini ada di dalamnya. Maka this merujuk pada Dialog. Makna kode connect ini adalah jika ada tombol yang terkena perlakuan clicked() (maksudnya, diklik), maka kelas Dialog memanggil fungsi stacksatu(). Itulah maksudnya. Dan ini sangat krusial, tidak boleh diganti kata this menjadi Dialog atau kata Dialog(), atau tidak juga boleh diganti menjadi stackia walaupun aslinya yang ingin dilakukan dengan kode connect() ini hanyalah mengganti indeks milik stackia saja. Nyatanya, harus demikianlah caranya. Kemudian, kode yang harus ada meskipun kecil sekali adalah ini: void Dialog::stacksatu() stackia->setcurrentindex(0); } void Dialog::stackdua() stackia->setcurrentindex(1); } Maksud semua potongan kode ini hanyalah bagaimana caranya dari tombol dikirim perintah ke QStackedLayout untuk mengubah indeksnya. Sudah, begitu saja. Hanya saja untuk itu, harus ada fungsi khusus sebagai SLOT yang dipanggil di dalam connect, yang di dalam fungsi khusus itu akan dipanggil fungsi asli milik QStackedLayout sehingga sanggup mengubah indeksnya. Jadi ada fungsi di dalam fungsi. Itu terjadi dalam kode fungsi stacksatu/stackdua di atas. Perhatikan, stackia- >setcurrentindex(1); itulah kodenya. Untuk bisa mengganti setcurrentindex ini harus kita lakukan demikian panjang pengodean. Namun jika dilihat ulang secara keseluruhan, ealah, ternyata kode kita ini sangatlah pendek. Mudah untuk dilakukan.

Hasil Akhir Alhamdulillah, berhasil. Kalau sudah bisa begini, semua sisa pengerjaan akan menjadi sangat-sangat ringan. Rangkuman 1. Fungsi connect untuk menggerakkan QStackedLayout dengan QPushButton harus disandarkan receiver SLOT-nya pada kelas tertinggi yakni Dialog, dengan kata ganti this. Khas OOP. 2. Mengubah nilai setcurrentindex miliknya QStackedLayout itu dilakukan dengan membuat satu fungsi baru yang di dalam fungsi itu baru dipanggillah setcurrentindex. Tidak bisa secara langsung setcurrentindex dipanggil di dalam connect. 3. Deklarasi objek di dalam CPP jika objek itu sudah dideklarasikan di H, maka tidak diulang nama kelasnya di kiri tanda =.

Catatan Penting Saya menyebutkan satu bulan rentang waktu pencarian ini adalah dari sini: 1. 1. http://qt-project.org/forums/viewthread/30461/ 2. 2. http://stackoverflow.com/questions/17916905/change-qstackedlayout-index-withqpushbutton-not-qcombobox