18 ay sonra ... @ Mat'ın cevabının altındaki yorumlarla başladım ve hızla odam tükeniyordu. Böylece cevap.
IMO emitne sözdizimsel şeker ne de basit bir anahtar kelimedir.
- Kod üretir (yukarıda @Mat tarafından açıklandığı gibi),
connectMekanizmanın aslında bunun bir a olduğunu anlamasına yardımcı olur signalve
- 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 signalve 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 .
emitgerek yoktur.emitSinyal 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 .