Image description
kode galat slot
QObject::connect: Tidak ada slot seperti itu

Pembahasan Galat QObject::connect: Tidak Ada Slot Seperti Itu

Masalah Awal

Seorang pengguna membuat aplikasi kecil untuk universitas dan menemui galat "no such slot". Berikut kode yang digunakan:

// Game.h

Q_OBJECT

public slots:

void displayMainMenu();

void showHelp(Button &start, Button &score, Button &help, Button &quit);

Dalam Game, metode displayMainMenu membuat tombol dan menghubungkan sinyal clicked ke slot, termasuk showHelp dengan argumen pointer tombol.

connect(helpButton, SIGNAL(clicked()), this, SLOT(showHelp(playButton, scoresButton, helpButton, quitButton)));

Galat yang muncul: QObject::connect: No such slot Game::showHelp(playButton, scoresButton, helpButton, quitButton). Pengguna sudah membersihkan dan membangun ulang proyek, serta menyertakan makro Q_OBJECT.

Jawaban: Kesalahan Umum

Pembalas menjelaskan beberapa kesalahan mendasar:

  • Saat menggunakan makro SIGNAL dan SLOT, hanya deklarasi tipe parameter yang harus diberikan, bukan nama variabel. Seharusnya: SLOT(showHelp(Button &, Button &, Button &, Button &))
  • Sinyal tanpa parameter (seperti clicked()) hanya bisa terhubung ke slot tanpa parameter. Oleh karena itu, showHelp harus dideklarasikan tanpa parameter.
  • Metode displayMainMenu seharusnya dipanggil sekali (misalnya di konstruktor), bukan setiap kali menu ditampilkan, karena akan membuat tombol baru dan koneksi baru, serta pointer tombol menjadi zombie karena tidak disimpan sebagai anggota kelas.
  • Deklarasi slot menggunakan referensi (Button &) tetapi dalam panggilan connect digunakan pointer (playButton). Tidak cocok.

Pengakuan dan Perbaikan

Pengguna mengakui kesalahan dan berencana menjadikan tombol sebagai variabel anggota serta memperbaiki fungsi showHelp. Setelah diperbaiki, pengguna melaporkan bahwa masalah terselesaikan.

Klarifikasi Akhir

Pembalas mengoreksi pernyataan pengguna yang menyarankan untuk tidak menghubungkan sinyal tanpa argumen ke slot tanpa argumen. Justru sebaliknya, ini adalah praktik yang benar dan umum, misalnya QPushButton::clicked() dan QAction::triggered(). Slot tanpa parameter adalah satu-satunya cara untuk menangani sinyal tersebut.

© 2026 - Semua hak dilindungi undang-undang. PT dengan modal Rp 10.000.000.000. Jl. Jend. Sudirman Kav. 52-53, Jakarta Selatan 12190