2009-05-15 7 views
7

मैं एक (पीई) क्यूटी नौसिखिया हूं, जो कुछ दिनों के लिए क्यूटी को सी # जीयूआई कोड पोर्ट कर रहा है। एक सवाल यह है कि मैं खुद से पूछता हूं कि QAbstractItemModel उप-वर्गों को parent() विधि प्रदान करने की आवश्यकता क्यों है, और परिणामस्वरूप QModelIndex, माता-पिता में किसी बच्चे की पंक्ति में उन्हें आपूर्ति करने की आवश्यकता क्यों है?QAbstractItemModel.parent(), क्यों?

यह आवश्यकता मुझे अपने पेड़ डेटा पर एक और परत जोड़ने के लिए मजबूर करती है (क्योंकि मैं में indexOf(item) पर कॉल नहीं करना चाहता, यह बहुत प्रभावी नहीं होगा) जो पंक्ति अनुक्रमणिका को याद करता है।

मैं यह पूछता हूं क्योंकि यह पहली बार है जब मुझे मॉडल आधारित दृश्य को देखने की आवश्यकता होती है। उदाहरण के लिए, कोको में NSOutlineViewDataSource की आवश्यकता नहीं है।

ट्रॉल्टेक देव स्मार्ट लोग हैं, इसलिए मुझे यकीन है कि इसके लिए एक अच्छा कारण है, मैं सिर्फ यह जानना चाहता हूं कि किस कारण से।

उत्तर

7

त्वरित उत्तर यह है, "उन्होंने उस समय सबसे अच्छा सोचा।" क्यूटी डेवलपर्स आपके जैसे ही हैं और मैं - वे सही नहीं हैं और वे गलतियां करते हैं। उन्होंने उस अनुभव से सीखा है और परिणाम Itemviews-NG के रूप में काम में है।

लिंक से अपने स्वयं के शब्दों में ऊपर:

के सिर्फ इतना कहना सुधार की गुंजाइश, कमरे के बहुत सारे है कि वहाँ हैं!

एक माता-पिता को एक पंक्ति और कॉलम इंडेक्स प्रदान करके, वे पेड़ों को लागू करने और समर्थन नेविगेशन को लागू करने का एक संभावित तरीका प्रदान करते हैं। वे आसानी से एक और स्पष्ट ग्राफ कार्यान्वयन का उपयोग कर सकते हैं।

+0

ब्लॉग पोस्ट लिंक के लिए धन्यवाद। यह देखने में दिलचस्प है कि हर कोई ओवर-इंजीनियरिंग जाल में पड़ सकता है। –

2

आवश्यकता मुख्य रूप से पेड़ों का समर्थन करने के लिए है। मैं आपको कारण बता नहीं सका, क्योंकि मैं एक क्यूटी देव नहीं हूं ... मैं केवल सामान का उपयोग करता हूं। हालांकि, यदि आप पेड़ नहीं कर रहे हैं, तो आप शायद अधिक से अधिक मॉडल वाले वर्गों का उपयोग कर सकते हैं और माता-पिता की आपूर्ति करने के ऊपरी हिस्से से निपटने की ज़रूरत नहीं है। मेरा मानना ​​है कि QAbstractListModel और QAbstractTableModel दोनों मूल भाग को स्वयं संभालते हैं, जिससे आप केवल इच्छित डेटा के बारे में चिंता करने के लिए स्वतंत्र हो जाते हैं।

पेड़ों के लिए, मुझे संदेह है कि माता-पिता की आवश्यकता के कारणों में से एक यह है कि वे केवल उन जानकारी के बारे में पूछने की कोशिश करते हैं जिन्हें उन्हें आकर्षित करने की आवश्यकता होती है। एक पेड़ में सभी वस्तुओं को जानने के बिना (यदि इसे विस्तारित नहीं किया गया था, उदाहरण के लिए), पेड़ में किसी दिए गए आइटम की पूर्ण स्थिति प्रदान करना बहुत मुश्किल हो जाता है।

माता पिता समारोह में indexOf(item) का उपयोग करने का quandry का सवाल है, आप का उपयोग कर QModelIndex के internalId या internalPointer माना जाता है? मुझे लगता है कि वे पीईक्यूटी में उपलब्ध हैं ... इंडेक्स के बारे में चीजों को ट्रैक करने के लिए उनका उपयोग आपके मॉडल द्वारा किया जा सकता है। आप माता-पिता की अनुक्रमणिका ढूंढने के प्रयास को कम करने के लिए इसका उपयोग करने में सक्षम हो सकते हैं।

+1

मुझे QAbstractListModel के बारे में पता है। मुझे एक पेड़ मॉडल चाहिए। मैं आंतरिक सूचक के बारे में भी जानता हूं और उपयोग करता हूं। हालांकि, कारण मैं कहता हूं कि मुझे अतिरिक्त परत की आवश्यकता है क्योंकि मेरे मॉडल में, पेड़ नोड्स के बच्चों को उनकी पंक्ति अनुक्रमणिका के बारे में पता नहीं है (उन्हें जानने की आवश्यकता नहीं है)। तो भले ही आंतरिक पॉइंटर() मुझे बच्चों के उदाहरण के लिए एक सूचक देता है, मुझे अभी भी child.parent.indexOf (बच्चा) फोन करना है (यहां तक ​​कि क्यूटी डेमो मॉडल में मॉडल भी ऐसा करता है ...)। मैं वास्तव में जानना चाहता हूं कि क्यों Qt को इस जानकारी की आवश्यकता है जब NSOutlineViewDataSource (वृक्ष दृश्य के लिए एक मॉडल भी) नहीं है। –

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