Setelah 18 bulan ... Saya mulai dengan komentar di bawah jawaban @ Mat, dan segera kehabisan ruangan. Demikian jawabannya.
IMO emit
bukanlah gula sintaksis atau kata kunci sederhana dalam arti itu
- Ini menghasilkan kode (seperti yang dijelaskan oleh @Mat di atas),
- Ini membantu
connect
mekanisme mengenali bahwa memang itu adalah signal
, dan
- Itu membuat sinyal Anda menjadi bagian dari sistem yang "lebih besar", di mana sinyal dan respons (slot) dapat dijalankan secara sinkron atau asinkron, atau antri, tergantung di mana dan bagaimana sinyal itu dipancarkan. Ini adalah fitur yang sangat berguna dari sistem sinyal / slot.
Seluruh sistem sinyal / slot adalah idiom yang berbeda dari pemanggilan fungsi sederhana. Saya percaya itu berasal dari pola pengamat. Ada juga perbedaan besar antara a signal
dan a slot
: sinyal tidak harus diimplementasikan, sedangkan slot harus !
Anda sedang berjalan di jalan dan melihat sebuah rumah terbakar (sebuah sinyal). Anda menghubungi 911 ( hubungkan sinyal api dengan slot respons 911 ). Sinyalnya hanya dipancarkan , sedangkan slotnya diimplementasikan oleh pemadam kebakaran. Mungkin tidak tepat, tetapi Anda mengerti. Mari kita lihat contoh OP.
Beberapa objek backend mengetahui seberapa banyak kemajuan yang telah dibuat. Jadi itu hanya bisa emit progressNotification(...)
memberi sinyal. Terserah kelas yang menampilkan bilah kemajuan yang sebenarnya, untuk mengambil sinyal ini dan menjalankannya. Tapi bagaimana pandangan terhubung ke sinyal ini? Selamat datang di sistem sinyal / slot Qt. Seseorang sekarang dapat membayangkan kelas manajer (biasanya semacam widget), yang terdiri dari objek tampilan dan objek komputasi data (keduanya QObjects
), dapat berfungsi connect (m_myDataEngine, &DataEngine::progressNotification, m_myViewObj, &SimpleView::displayProgress)
.
Mari kita tidak membahas aspek desain kelas manajer, tetapi cukup untuk mengatakan bahwa di sinilah sistem sinyal / slot bersinar. Saya dapat fokus untuk merancang arsitektur yang sangat bersih untuk aplikasi saya. Tidak selalu, tetapi sering kali, saya menemukan bahwa saya hanya memancarkan sinyal tetapi menerapkan slot .
Jika dimungkinkan untuk menggunakan / memanggil metode sinyal tanpa pernah memancarkannya , maka itu berarti bahwa Anda tidak pernah membutuhkan fungsi itu sebagai sinyal sejak awal.
emit
tidak dibutuhkan. Anehnya, Anda mengetahuiemit
lama setelah memanggil sinyal secara langsung, karena sistem slot sinyal adalah salah satu hal pertama yang harus dipelajari tentang Qt.