Tag

, , , ,


Qt Logo

Image via Wikipedia

Dalam Qt, untuk menghubungkan setiap event atau kejadian yang terjadi pada satu objek dengan objek lain menggunakan sebuah methode connection. Methode connection ini mengimplementasikan Signal dan Slot. Dimana Signal adalah methode yang mengirimkan Sinyal atau kejadian atau event yang terjadi pada objek pemicu ke objek penerima. Sedangkan Slot adalah methode penerima yang digunakan untuk memproses lebih lanjut event atau Signal yang diterima dari objek pengirim.

Singkatnya signal dan slot digunakan untuk berkomunikasi antar objek dalam program. Mekanisme signal dan slot ini merupakan pusat dari interaksi yang terjadi dalam program.

Di dalam pemrograman berbasis GUI, ketika kita menggunakan sebuah komponen atau widget, (misalkan saja sebuah tombol Close) kita perlu membuat sebuah interaksi dengan widget lainnya (misalkan dialog atau window tempat button tersebut berada) agar jika kita meng-klik tombol close tersebut, jendela atau dialog tersebut akan di tutup. Di dalam programnya, kita membutuhkan sebuah singnal yang dikirim oleh tombol Close (dalam hal ini clicked() ) dan sebuah slot methode penerima dari widget jendelanya (slot close()).

Perhatikan contoh berikut:

#include <QApplication>
#include <QPushButton>
int main(int a, char*s[]) {
    QApplication app(a,s);
    QPushButton *pbC = new QPushButton("Close");
    QObject::connect(pbC,SIGNAL(clicked()),pbC,SLOT(close()));
    pbC->show();
    return app.exec();
}

Dalam contoh tersebut, objek pengirim Signal yakni button pbC dan objek penerimanya yakni dirinya sendiri (button pbC selaku sender sekaligus receiver). QObject::connect(pbC,SIGNAL(clicked()),pbC,SLOT(close())); untuk menentukan Signal apa yang akan memicu (dalam hal ini clicked()) dan slot apa yang akan menerima (dalam hal ini slot close()).

Ketika program dijalankan (untuk kompilasi dan eksekusi baca tulisan sebelumnya), akan ada sebuah button “Close” dan ketika Button tersebut di-klik, maka widget Button tersebut akan langsung di-close.

Inilah penjelasan singkat mengenai Signal dan Slot ini. Contoh programnya dapat di download di sini.


Contoh lainnya.

Untuk contoh implementasi yang lebih kompleks sedikit, perhatikan contoh program berikut:

file sigslot.h

Keterangan: perhatikan bagian:

public slots:
   void pbKlicked();
   void lePakeEnter();

Kedua prototype methode tersebut adalah prototype slot methode. Dalam sebuah kelas yang diturunkan melalui kelas QObject (dalam hal ini QWidget juga merupakan turunan dari kelas QObject), kita bisa menambahkan signal dan slot sendiri sesuai dengan kebutuhan kita. Dimana untuk Signal nantinya dapat dikirim dari object kelas tersebut ketika berganti keadaan (misanya pada saat object dibuat, di-Full screen dan lainnya). Pembahasan mengenai Pembuatan Signal akan kita bahas pada tulisan berikutnya.

file sigslot.cpp

Keterangan: (Baris ke-23 dan 24) Signal sender ada dua, yakni pbPoke dengan signal clicked() dan leName (Line Edit) dengan signal returnPressed() (kondisi dimana tombol enter ditekan pada Line Edit). Sedangkan slot penerima semua berada pada Kelas SigSlot yakni slot methode pbKlicked() dan lePakeEnter(). Disini juga diimplementasikan slot methode yang telah dibuat prototypenya pada file sigslot.h. Disini kita bisa menentukan sendir, apa saja yang akan dijalankan ketika slot tersebut di panggil dari koneksi yang ada.

Untuk pembahasan mengenai QVBoxLayout dan QHBoxLayout yang ada pada baris ke-13 sampai 20, insyaAllah akan di bahas pada bab tersendiri yang khusus membahas mengenai Layout.

file main.cpp

Pada file ini, hanya dibuat sebuah objek dari kelas SigSlot. Sedangkan untuk penjelasan bagian yang lainnya dapat di rujuk pada tulisan sebelumnya. Program lengkapnya dapat di download di sini.

Hasil eksekusi:

Ketika menekan enter:

Ketika Button di Klik:

Semoga tulisan singkat ini bisa beranfaat bagi teman-teman yang ingin belajar pemrograman dengan framework Qt.

Tetap semangat dan banyak-banyak latihan….