2009-12-20 14 views
20

संकेत और नीचे प्रकार के स्लॉट के लिएक्यूटी सिग्नल और स्लॉट के लिए तर्क प्रकार, संदर्भ संदर्भ क्वालीफायर मामले क्या है?

signals: 
    void textChanged(const QString &); 

public slots: 
    void setText(const QString & text) 

textChanged और setText के तर्क के प्रकार स्थिरांक और & की invarable काम करने के लिए लगता है। क्या लगातार और संदर्भ योग्यता QString का उपयोग करने की तुलना में कोई अंतर बनाती है?

QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString))); 
QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &))); 

संपादित करें: मैं त्रुटि संदेश दिखा जब वहाँ असंगत प्रकार संकेत या स्लॉट में इस्तेमाल किया जा रहा उत्पादन खिड़की नोटिस नहीं किया था। मैंने सोचा था कि सिग्नल स्लॉट तंत्र संकलन समय पर तर्क प्रकार त्रुटि का पता लगाने में सक्षम है।

उत्तर

24

क्यूटी एक normalized signature की जाँच करता है, जिसका अर्थ है

सामान्यीकरण, एक न्यूनतम करने से व्हाइटस्पेस कम कर देता है सामने जहां उपयुक्त हो, मूल्य प्रकार से निकाल देता है 'स्थिरांक' और मूल्यों के साथ स्थिरांक संदर्भ की जगह पर ले जाता है 'स्थिरांक' ।

+0

क्या कोई लेख है जो पूरी तरह से बताता है कि क्यूटी सिग्नल और स्लॉट तंत्र को कैसे लागू करता है? http://doc.trolltech.com/4.6/signalsandslots.html – yesraaj

+0

के अलावा क्या आपका मतलब है कि पूरी तरह से विस्तार से, या पूरी तरह से आपके द्वारा चलने वाले ट्यूटोरियल के रूप में, लेकिन दूसरी गति से? अधिक जानकारी के साथ – e8johan

+0

, किसी भी लिंक की सराहना की जाती है :) – yesraaj

3

अस्वीकरण: मेरा क्यूटी बल्कि जंगली है, लेकिन सिग्नल/स्लॉट तंत्र अभी भी सी ++ फ़ंक्शन कॉल है। अगर सिग्नल/स्लॉट तंत्र वास्तव में वस्तुओं को आंतरिक भंडारण में प्रतिलिपि बनाता है, तो मेरी माफी (आपको क्यूटी पृष्ठों की जांच करने की आवश्यकता होगी, सिग्नल/स्लॉट afaik पर एक बड़ा है) - क्योंकि नीचे दी गई बिट्स केवल सी ++ संदर्भ में प्रासंगिक होंगी, एक सी ++ + क्यूटी संदर्भ में नहीं।

यदि आप संदर्भ छोड़ देते हैं, तो स्ट्रिंग की प्रतिलिपि बनाई जाएगी (और कॉन्स कोई फर्क नहीं पड़ता है, इसमें किए गए किसी भी बदलाव अकेले फ़ंक्शन में ही रहेगा)।
यदि आप संदर्भ में जाते हैं लेकिन कॉन्स लेते हैं, तो आप उस स्ट्रिंग को संशोधित करने की विधि को अनुमति देते हैं जो आप इसे देते हैं। वे दोनों काम करते हैं, लेकिन आपके द्वारा पारित वस्तु (अलग-अलग परिवर्तन/परिवर्तन को बनाए रखने की संभावना) के लिए अलग-अलग चीजें करते हैं।

मैं सुझाव है कि आप निम्न संसाधनों पढ़ें:

(स्थिरांक शुद्धता पर) https://isocpp.org/wiki/faq/const-correctness

(संदर्भों पर) https://isocpp.org/wiki/faq/references

को समझने के लिए वास्तव में क्या एक पैरामीटर गुजर है और कैसे void foo(const A&)/ / void foo(A&)/ void foo(A) सभी अलग हैं।

+5

प्रत्यक्ष कनेक्शन के लिए, यह अनुशंसा की जाती है कि मूल्यों को अनावश्यक प्रतियों से बचने के लिए संदर्भ संदर्भ द्वारा पारित किया गया हो। कतारबद्ध कनेक्शन के लिए क्यूटी एक प्रतिलिपि बनायेगी चाहे आप तर्क कैसे पारित करें। – rpg

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