2015-12-18 11 views
6

मैं Q_PROPERTY मैक्रो के बारे में क्यूटी 5.5 के प्रलेखन को पढ़ रहा था, लेकिन मैं इसे अच्छी तरह से समझ नहीं पाया।Q_PROPERTY: सदस्य बनाम पढ़ें/लिखना

मैं समझता हूं कि आप इस मैक्रो में कीवर्ड सदस्य या एक्सेसर्स रीड/WRITE के साथ उपयोग कर सकते हैं। यदि आप कीवर्ड सदस्य का उपयोग करते हैं तो आपको एक्सेसर्स लिखने की ज़रूरत नहीं है, क्योंकि आप सेटप्रॉपर्टी() और प्रॉपर्टी() के उपयोग के साथ अपने निजी डेटा सदस्य (संपत्ति) तक पहुंच सकते हैं, जैसे सेट और प्राप्त करें।

बिंदु यह है: क्या सदस्य का उपयोग करने और पढ़ने/लिखने के बीच कोई अंतर है? आपको कब उपयोग करना चाहिए और दूसरी तरफ?

आवश्यक हो तो के लिए:

Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged) 

पढ़ें/लिखें का उपयोग करने का उदाहरण::

सदस्य का उपयोग करने का उदाहरण

Q_PROPERTY(int propX READ getX WRITE setX) 

उत्तर

7

ध्यान से documentation पढ़कर, मुझे लगता है कि वहाँ थोड़ा, महत्वपूर्ण मतभेद हैं।

सबसे पहले:

एक सदस्य चर संघ कोई पढ़ें एक्सेसर समारोह निर्दिष्ट किया जाता है, तो आवश्यक है। यह रीड और WRITE एक्सेसर फ़ंक्शंस बनाने की आवश्यकता के बिना दिया गया सदस्य परिवर्तनीय पठनीय और लिखने योग्य बनाता है।

इसका मतलब है कि आप MEMBER उपयोग कर सकते हैं और स्वचालित रूप से जेनरेट, तुच्छ एक्सेसर कार्यों पर भरोसा करते हैं या अपने आप के लिए उन कार्यों को परिभाषित करता है, तो वे एक डिफॉल्ट की एक से अधिक जटिल हो करने के लिए होती हैं।

अन्य शब्दों में, अगर आपके एक्सेसर कार्यों के लिए एक उदाहरण के रूप में, सभी तरह से एक ही कर रहे हैं:

int propName() const { return prop; } 

इस प्रकार, MEMBER ठीक है। अगर आप की तरह कुछ भी नहीं है:

int propName() const { return superComplexMathUsedToComputeProp(); } 

इसके अलावा, ध्यान दें कि:

पढ़ें, लिखें, और रीसेट कार्यों विरासत में मिला जा सकता है। वे आभासी भी हो सकते हैं।

आप एक पदानुक्रम के साथ काम कर रहे हैं, तो हो सकता है आप तो शायद READ और WRITE साथ जाने के लिए बेहतर होगा उन्हें विरासत में मिला जा करना चाहते हैं,।

सबसे अच्छा और क्या उपयोग करना है विशिष्ट समस्या पर निर्भर करता है।

+0

बहुत बहुत धन्यवाद। आखिरकार ऐसा लगता है जैसे मैंने सोचा था, लेकिन इसे साफ़ करना बेहतर है :) –

+0

@ पाब्लो आपका स्वागत है, मैं मानता हूं कि कभी-कभी दस्तावेज को दो बार पढ़ना चाहिए ताकि पूरी तरह से समझ सकें कि किसी विकल्प के पीछे क्या उद्देश्य है और यह हमारे कोडबेस को कैसे प्रभावित करेगा। निजी तौर पर, मैं 'READ' /' WRITE' एक्सेसर फ़ंक्शंस का उपयोग करना पसंद करता हूं क्योंकि, कम से कम मेरे लिए, यह समझना आसान है कि कोड में क्या हो रहा है बस इसे देखकर। – skypjack

+0

@skpjack मेरी समस्या यह है कि कभी-कभी जब मैं प्रलेखन पढ़ता हूं तो मुझे लगता है कि खो गया है। यह मानने के लिए कि आप 'अंतर्निहित चीजें' जानते हैं और समझते हैं। दस्तावेज किसी ऐसे व्यक्ति के लिए बहुत ही कुशल है जिसके पास व्यापक अनुभव है, लेकिन फ्रेमवर्क से शुरू होने वाला कोई भी व्यक्ति खो सकता है। –

1

सदस्य क्यूटी मेटा ऑब्जेक्ट सिस्टम में केवल ReadProperty और WriteProperty सुविधाओं को बनाता है (जेनरेट की गई फ़ाइल फ़ाइल देखें)। यह QMLs के साथ इंटरफेसिंग के लिए उपयोगी है। सी ++ में संपत्ति का उपयोग करने के लिए, गेटर्स और सेटर्स को भी लागू किया जाना है।

तो सदस्य -> ​​बस QMLs पढ़ें के लिए, लिखने, NOTIFY -> सी ++ और QML

आप तुच्छ getters और setters प्रोग्रामिंग से बचने के लिए, अपने खुद के मैक्रो रैपिंग Q_PROPERTY को परिभाषित करना चाहते हैं।

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