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.
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.