के साथ पूर्ववत रूपरेखा को एकीकृत रूप से एकीकृत करना मैं एक क्यूटी ऐप लिख रहा हूं जो QGraphicsScene
कैनवास के आसपास चलने योग्य आकार के साथ आधारित है, और मैं पूर्ववत-पूर्व कार्यक्षमता को एकीकृत करने की कोशिश कर रहा हूं। आकारों के निर्माण और हटाने जैसे अधिकांश कार्यों के लिए QGraphicsScene
पर लागू करने के लिए यह काफी छोटा है, लेकिन मैं तत्वों को चलाना चाहता हूं और आंदोलन को पूर्ववत करने के लिए चाहता हूं। अभी मैं दृश्य पर रबड़ बैंड ड्रैगमोड और ItemIsSelectable
और ItemIsMovable
वस्तुओं पर झंडे का उपयोग कर रहा हूं। समस्या यह है कि आकार आंदोलन का प्रतिनिधित्व करने के लिए QUndoCommand
बनाने के लिए कोई अच्छी जगह नहीं है। यदि मैं इसे QGraphicsScene::itemChange
विधि में करता हूं, तो दो या दो से अधिक आकारों को चुनने और स्थानांतरित करने के लिए अलग-अलग ऑब्जेक्ट्स अलग-अलग ऑब्जेक्ट्स में अलग-अलग ऑब्जेक्ट्स के लिए परिणाम दिया जाता है और इस प्रकार विलय करने में सक्षम नहीं होते हैं, इसलिए अप्रत्याशित व्यवहार में परिणाम पूर्ववत करते हैं। QGraphicsScene
में कोई घटना नहीं है जिसे कॉल किया जा सकता है जब उसके आइटम चारों ओर स्थानांतरित हो जाते हैं, इसलिए मैं फंस गया हूं।क्यूटी: QGraphicsScene
सबसे खराब स्थिति यह है कि मुझे लगता है कि मैं अपने कस्टम QGraphicsItem
वस्तुओं पर ItemIsMovable
ध्वज को अक्षम और QGraphicsScene
माउस घटनाओं में पूरी तरह से आंदोलन को संभालने, लेकिन है कि कार्यक्षमता reimplementing ठीक से काफी जटिल लगता है (मैं जाँच कैसे क्यूटी वह आंतरिक रूप से करता है और जटिल मामलों को संभालने के लिए बहुत सारे कोड हैं, जैसे कि एक वस्तु और उसके कुछ बच्चे दोनों चुने गए हैं)। यह पूर्ववत स्टैक के लिए उपयोग के सबसे स्पष्ट मामलों की तरह लगता है (इतना है कि पूर्ववत ढांचे के लिए उदाहरण प्रोग्राम QGraphicsScene
प्रोग्राम जैसा है, मेरे जैसे बहुत अधिक ऑब्जेक्ट आंदोलन समर्थन के बिना) तो यह अजीब लगता है कि इसमें कोई अंतर्निहित नहीं है कोर कार्यक्षमता के एक महत्वपूर्ण हिस्से को पुन: कार्यान्वित किए बिना इसे करने का तरीका। क्या किसी के पास प्रोग्राम की कोई अंतर्दृष्टि या उदाहरण हैं जो ऐसा करते हैं?
मैं एक समान हैकिश फिक्स के साथ आया था जिसमें प्रत्येक 'QGraphicsItem' में पिछले स्थान स्टैक शामिल था और फिर आइटम को पूर्ववत स्टैक में बदल दिया गया था। यह बदसूरत है लेकिन यह काम करता है। प्रश्न और उत्तर के लिए धन्यवाद। –