18 ay sonra ... @ Mat'ın cevabının altındaki yorumlarla başladım ve hızla odam tükeniyordu. Böylece cevap.
IMO emit
ne sözdizimsel şeker ne de basit bir anahtar kelimedir.
- Kod üretir (yukarıda @Mat tarafından açıklandığı gibi),
connect
Mekanizmanın aslında bunun bir a olduğunu anlamasına yardımcı olur signal
ve
- Sinyalin nerede ve nasıl yayıldığına bağlı olarak sinyallerin ve yanıtların (yuvaların) senkronize veya asenkron olarak yürütülebildiği veya sıraya konulabildiği "daha büyük" bir sistemin parçası olmasını sağlar. Bu, sinyal / slot sisteminin son derece kullanışlı bir özelliğidir.
Tüm sinyal / slot sistemi, basit bir fonksiyon çağrısından farklı bir deyimdir. Gözlemci modelinden kaynaklandığına inanıyorum. Ayrıca a signal
ve a arasında büyük bir fark vardır slot
: bir sinyalin uygulanması gerekmez , oysa bir yuvanın uygulanması gerekir !
Caddede yürüyorsunuz ve yanmakta olan bir ev görüyorsunuz (bir sinyal). 911'i arayın ( yangın sinyalini 911 yanıt yuvasına bağlayın ). Sinyal sadece yayıldı , oysa yuva itfaiye tarafından uygulandı . Kesin olmayabilir, ama fikri anladınız. OP örneğine bakalım.
Bazı arka uç nesneleri, ne kadar ilerleme kaydedildiğini bilir. Yani basitçe emit progressNotification(...)
sinyal verebilir . Bu sinyali alıp üzerinde yürütmek, gerçek ilerleme çubuğunu görüntüleyen sınıfa bağlıdır. Ancak görüş bu sinyale nasıl bağlanır? Qt'nin sinyal / slot sistemine hoş geldiniz. Artık, bir görünüm nesnesi ve bir veri hesaplama nesnesinden (her ikisi de mevcut olan QObjects
) oluşan bir yönetici sınıfı (tipik olarak bir tür widget) tasarlanabilir connect (m_myDataEngine, &DataEngine::progressNotification, m_myViewObj, &SimpleView::displayProgress)
.
Yönetici sınıfının tasarım yönlerine girmeyelim, ancak sinyal / slot sisteminin parladığı yerin burası olduğunu söylemek yeterli. Uygulamam için çok temiz bir mimari tasarlamaya odaklanabiliyorum. Her zaman değil, çoğu zaman, yalnızca sinyal yaydığımı, yuvaları uyguladığımı görüyorum .
Bir sinyal yöntemini , onu hiç yaymadan kullanmak / çağırmak mümkünse , o zaman bu , ilk başta bir sinyal olarak bu işleve asla ihtiyaç duymadığınız anlamına gelir .
emit
gerek yoktur.emit
Sinyal slot sistemi Qt hakkında öğrenilmesi gereken ilk şeylerden biri olduğu için, sinyalleri doğrudan çağırdıktan sonra uzun süre öğrenmiş olmanız gariptir .