2014-05-02 24 views
6

Aşağıdaki sınıf tasarımları gibi bir şey var ve bunların arasında iletişim kurmak için birçok sinyal yuvası bağlantısı kullanmama sorun olup olmadığını merak ediyorum. Tüm GUI'yi tutan bir MainWindow sınıfı, daha sonra arka uç için bir arabirim sağlayan bir Wrapper sınıfı var, o zaman iş parçacığı oluşturmak ve yönetmek için bir Controller sınıfı var ve sonunda tüm iş yapan Worker s var.Zincir sinyalleri ve yuvaları birkaç kez tamam mı?

Şimdi bir dosya yüklediğimi ve MainWindow'daki bir ilerleme çubuğu kullanarak ilerlemeyi görüntülemek istediğimi varsayalım. Worker sınıfım, Wrapper sınıfına ilerleme sinyalini gönderen updateProgress(int progress) sınıfına updateProgress(int progress) sınıfını gönderir, bu da ana pencereye bir ilerleme sinyali gönderir ve sonuçta ilerleme çubuğunu günceller.

Benzer şekilde, veriler yüklendiğinde, Wrapper sınıfında işlenir ve tekrar sinyaller ve yuvalar (daha az adımda olsa da) aracılığıyla iletilir.

Qt'de işleri yapmanın standart bir yolu mu yoksa tasarımımı yeniden düşünmeli miyim?

cevap

8

Geçerli bir olasılıktır. Qt aşağıdaki hatta daha ileri giderek yapmaya izin verdiğini

Not:

doğru
QObject::connect(&sender, SIGNAL(mySenderSignal(int)), 
       &receiver, SIGNAL(myReceiverSignal(int)); 

, bir sinyale bir sinyal bağlayabilir. Tümü, gönderenin sinyalini verdiğinde "" olarak görülebilir, alıcının sinyalini yayar ".

Ara yuvalarınızda gerçekleştirilecek belirli bir göreviniz yoksa, bu tam olarak ne yaptığınızı gösterirken size birkaç satır kazandırabilir: bir sinyali "yönlendiriyorsunuz" demektir. Aksi takdirde, kesinlikle arasında çalışmanız gerekiyorsa, sinyalleri ve yuvaları tutmalısınız.

Sinyal imzalarının eşleştiğinden emin olmanız gerektiğini unutmayın.

+0

Çok iyi cevap. – user2672165

İlgili konular