2014-05-02 6 views
6

मेरे पास कक्षाओं के निम्नलिखित डिज़ाइन की तरह कुछ है और मुझे आश्चर्य है कि यह ठीक है कि मैं उनके बीच संवाद करने के लिए कई सिग्नल स्लॉट कनेक्शन का उपयोग करता हूं। एक MainWindow वर्ग है जिसमें सभी जीयूआई हैं, फिर Wrapper कक्षा, जो बैक-एंड के लिए एक इंटरफ़ेस प्रदान करती है, फिर Controller कक्षा स्पॉन्गिंग और मैनेजिंग थ्रेड के लिए होती है और अंत में Worker एस है जो सभी काम करता है।क्या चेन सिग्नल और स्लॉट कई बार ठीक है?

अब मान लें कि मैं एक फाइल लोड कर रहा हूं और MainWindow में प्रगति पट्टी का उपयोग कर प्रगति प्रदर्शित करना चाहता हूं। मेरा Worker वर्ग updateProgress(int progress) से Controller::handleProgress(int progress) स्लॉट भेजता है जो फिर से Wrapper कक्षा में प्रगति संकेत भेजता है, जो बदले में मुख्य विंडो में प्रगति संकेत भेजता है, जो अंततः प्रगति पट्टी को अद्यतन करता है।

इसी प्रकार जब डेटा लोड किया गया है तो इसे Wrapper कक्षा में संसाधित किया जाता है और फिर, सिग्नल और स्लॉट (हालांकि एक कम चरण के साथ) के माध्यम से संचारित किया जाता है।

क्या यह क्यूटी में चीजों को करने का एक मानक तरीका है या क्या मुझे अपने डिजाइन पर पुनर्विचार करना चाहिए?

उत्तर

8

यह एक वैध संभावना है।

ध्यान दें कि क्यूटी आप भी आगे जाने के लिए और निम्न कार्य करने की अनुमति देता है:

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

यह सही है, तो आप एक संकेत के लिए एक संकेत बाध्य कर सकते हैं। प्रेषक के सिग्नल उत्सर्जित होने पर इसे सभी को के रूप में देखा जा सकता है, रिसीवर के सिग्नल "को छोड़ दें।

यदि आपके मध्यस्थ स्लॉट में प्रदर्शन करने के लिए आपके पास कोई विशिष्ट कार्य नहीं है, तो यह आपको कुछ पंक्तियों को बचा सकता है, जबकि आप वास्तव में क्या कर रहे हैं: आप सिग्नल को "अग्रेषित" कर रहे हैं। अन्यथा, यदि आपको पूरी तरह से काम करना चाहिए, तो आपको सिग्नल और स्लॉट रखना होगा।

ध्यान दें कि आपको अभी भी यह सुनिश्चित करना होगा कि सिग्नल हस्ताक्षर मिलान करते हैं।

+0

बहुत अच्छा जवाब। – user2672165

संबंधित मुद्दे