Study
Qt

Membuat Custom Signal & Slot

Penjelasan

Class custom bisa mendefinisikan signal sendiri lewat macro signals: (biasanya tanpa implementasi, cuma deklarasi) dan slot sendiri lewat public slots: (method biasa yang bisa dipanggil sebagai respons signal). Class-nya WAJIB extends QObject dan diberi macro Q_OBJECT di awal supaya sistem meta-object Qt mengenalinya.

Contoh Konsep

class Counter : public QObject
{
    Q_OBJECT

public:
    Counter(QObject *parent = nullptr) : QObject(parent), nilai(0) {}

public slots:
    void tambah()
    {
        nilai++;
        emit nilaiBerubah(nilai); // memicu signal
    }

signals:
    void nilaiBerubah(int nilaiBaru);

private:
    int nilai;
};

// Pemakaian:
// Counter counter;
// QObject::connect(&counter, &Counter::nilaiBerubah, [](int n){
//     qDebug() << "Nilai sekarang:" << n;
// });
// counter.tambah();

Praktikum

Buat class Termometer (turunan QObject, dengan Q_OBJECT) dengan slot ubahSuhu(int suhuBaru) yang mengubah properti suhu dan meng-emit signal suhuBerubah(int suhu). Tulis contoh connect() ke slot itu.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Macro Q_OBJECT WAJIB ada di class mana pun yang mendefinisikan signal/slot sendiri — lupa menulisnya membuat proses compile GAGAL dengan pesan error yang cukup membingungkan untuk pemula (biasanya soal vtable/undefined reference), karena Meta-Object Compiler (moc) tidak sempat menghasilkan kode pendukung yang dibutuhkan.