2010-07-06 8 views
14

के साथ क्यूटी मॉडल/व्यू फ्रेमवर्क का उपयोग कैसे करें मैं मैपिंग एप्लिकेशन पर काम कर रहा हूं और किसी तालिका, एक फॉर्म और मानचित्र में ग्राफ़िकल ऑब्जेक्ट्स के रूप में डेटा ऑब्जेक्ट्स प्रदर्शित करने की आवश्यकता है। मैं पीईक्यूटी का उपयोग कर रहा हूं, लेकिन यह वास्तव में महत्वपूर्ण नहीं है क्योंकि यह एक क्यूटी प्रश्न है जो पायथन प्रश्न नहीं है।ग्राफ़िक्स व्यू फ्रेमवर्क

यदि मुझे केवल टेबल और फॉर्म दृश्यों की आवश्यकता है तो यह आसान होगा, मैं केवल क्यूटी मॉडल/व्यू फ्रेमवर्क का उपयोग करूंगा। हालांकि मुझे ग्राफिक्स व्यू फ्रेमवर्क का उपयोग करके केवल वास्तव में उपलब्ध कार्यक्षमता प्रदान करने के लिए मानचित्र दृश्य की आवश्यकता है, जो अनिवार्य रूप से डेटा मॉडल के रूप में कार्यरत QGraphicsScene के साथ स्वयं का मॉडल/व्यू फ्रेमवर्क है।

मैं ऐसा करने के दो तरीकों के बारे में सोच सकता हूं। एक QAbstractItemModel से उपनिवेशित एक आधिकारिक मॉडल से शुरू करना होगा, इसे QAbstractItemView के उप-वर्ग से लिंक करें और वहां से दृश्य में QGraphicsItems उत्पन्न और अद्यतन करें। हालांकि यह बदसूरत दिखता है क्योंकि मुझे यकीन नहीं है कि क्यू ग्राफिक्स इटम्स के साथ बातचीत के बावजूद डेटा इंटरैक्शन के साथ उपयोगकर्ता इंटरैक्शन को कैसे संभालना है और बदलना है।

दूसरी तरफ मैं ऐसा करने के लिए सोच सकता हूं कि QGraphicsScene को आधिकारिक डेटा स्रोत के रूप में व्यवहार करना है, प्रत्येक QGraphicsItem की .data() संपत्ति में डेटा ऑब्जेक्ट संग्रहीत करना। मैं फिर QAbstractItemModel को उपclass और लिखूंगा ताकि यह दृश्य में डेटा को डेटा स्टोर के रूप में एक्सेस कर सके, अन्य विचार तब इसे अपने मॉडल के रूप में उपयोग करेंगे। मैं मॉडल के दृश्य में डेटा में परिवर्तनों का प्रचार कैसे करूं?

जो भी दृष्टिकोण मैं लेता हूं, ऐसा लगता है कि ढांचे के आधार पर कोई अंतर नहीं है। मॉडल/दृश्य में सभी परिवर्तन मॉडल में किए जाने के लिए माना जाता है। ग्राफिक्स में देखें कि सभी बदलाव दृश्य में किए गए हैं।

तो आप कौन सा दृष्टिकोण QAbstractItemModel (आधिकारिक) -> QAbstractItemView-> QGraphicsScene या वैकल्पिक रूप से QGraphicsScene (आधिकारिक) -> QAbstractItemModel-> अन्य दृश्यों का चयन करेंगे। आप एक दूसरे के ऊपर क्यों चुनेंगे और आप किस चीज की उम्मीद करते हैं? क्या किसी और को क्यूटी के जुड़वां मॉडल/दृश्य ढांचे के बीच इस अंतर को पुल करने की आवश्यकता है और आपने यह कैसे किया?

उत्तर

10

QAbstractItemModel (आधिकारिक) -> QAbstractItemView-> QGraphicsScene

बिना किसी शक। मैंने पहले यह किया है, इसे थोड़ी-थोड़ी नकल की आवश्यकता होती है (कम से कम कुछ जो मैं नहीं बचा सकता) लेकिन कुछ भी बुरा नहीं है।

यह आपको दृश्य के साथ मानक दृश्यों में अपने डेटा का प्रतिनिधित्व करने की अनुमति देता है जो काफी अच्छा है।

मेरे सबसे अच्छा सलाह QGraphicsItem को QPersistantModelIndex के QHash और QAbstractItemView आपके द्वारा बनाए गए एक QGraphicsScene स्टोर करने के लिए किया जाएगा। यह आपको ग्राफिक्स व्यू भूमि (QGraphicsItem)

+0

के लिए मॉडल/व्यू भूमि (QModelIndex) के बीच जल्दी से जाने की अनुमति देता है। यह दृष्टिकोण है कि मैंने शुरू किया है, इससे पहले कि मुझे एहसास हुआ कि मैं इसे दूसरी तरफ कर सकता हूं। मैं AQbstractItemView के एकमात्र तरीकों का अनुमान लगा रहा हूं, मुझे उप-वर्ग की आवश्यकता होगी डेटा को बदल दिया गया है(), पंक्तियां() और पंक्तियांअबाउट करने के लिए हटाए गए()? फिर दृश्य में वस्तुओं को उचित रूप से प्रबंधित करें। मुझे उम्मीद है कि मैं QGraphicsItems में QPersistentModelIndexes स्टोर करूंगा। मुझे QHash विचार पसंद है। मैं पीईक्यूटी का उपयोग कर रहा हूं इसलिए मैं एक पायथन शब्दकोश का उपयोग करूंगा, लेकिन यह एक अच्छा अनुकूलन है। –

+0

@ सिमॉन: हाँ मुझे लगता है कि आपको यह मिला है, डेटा में बदल दिया गया है() आपको अपने डेटा और प्रतिनिधित्व के आधार पर QGraphicsScene से कुछ कोड डुप्लिकेट करना पड़ सकता है, लेकिन फिर भी, यदि कोई हो तो यह मामूली होना चाहिए। –

+0

इसे एक बुनियादी स्तर पर, काम कर रहा है। वाह! –