2011-10-11 8 views
5

मैं एक QGraphicsPolygonItem का उपयोग कर रहा हूं और मैंने देखा है कि यह हमेशा प्रारंभ बिंदु के साथ अंत बिंदु को जोड़ता है।QGraphicsPolygonItem एक खुला (बंद नहीं) बहुभुज चित्रण

मुझे पता है कि बहुभुज शब्द का अर्थ वास्तव में है, और जो मैं खोज रहा हूं वह "पॉलीलाइन" या "बहुभुज श्रृंखला" है। मुझे QGraphicsItem subclasses में ऐसा कुछ नहीं मिला।

मैं क्यूग्राफिक्स फ्रेमवर्क में बहुभुज श्रृंखला कैसे आकर्षित करूं? क्या QGraphicsPolygonItem या एक वर्ग की कोई संपत्ति है जो ऐसा करती है?

उत्तर

3

आप QPainterPath का उपयोग कर सकते हैं और yors पॉलीलाइन पॉइंट्स इनपुट करने के लिए लाइन टू विधि का उपयोग कर सकते हैं, फिर इसे ग्राफिक्स आइटम बनाने के लिए केवल QGraphicsPathItem का उपयोग करें।

वैकल्पिक रूप से आप कई QGraphicsLineItem को एक QGraphicsItemGroup में संयोजित करने के बारे में भी सोच सकते हैं, लेकिन यह अधिक कठिन है क्योंकि आपको एक साथ लाइनों को संरेखित करने पर ध्यान देना होगा।

क्या आप यह देख रहे हैं?

संपादित करें:

QPainterPath जाहिरा तौर पर पथ बंद हो रहा है, तो आप केवल लाइनों के समूह के साथ छोड़ दिया जाता है।

EDIT2: आप भ्रमित लिए

क्षमा करें, लेकिन HostileFork सही होने लगते हैं - तुम सिर्फ QPainterPath का उपयोग करें और pathItem->setBrush(QBrush(Qt::transparent)); फोन अपने पथ रिक्त रखने के लिए।

+0

QPainterPath स्वचालित रूप से पथ बंद नहीं करता है, इसलिए लाइन के अनुक्रम का उपयोग करके और स्थानांतरित करने के लिए शायद सबसे अच्छा तरीका है। भरने के कारण आप उलझन में हो सकते हैं? यदि आप भरना नहीं चाहते हैं, तो आपको 'pathItem-> setBrush (QBrush (Qt :: पारदर्शी)) कॉल करना होगा; ' – HostileFork

2

मुझे एक ही समस्या थी, और मैंने इसे QGraphicsPathItem क्लास का उपयोग करके हल किया। निम्नलिखित कोड में, बहुभुज एक गैर बंद कर दिया QPolygonF वस्तु है (यानी एक QPolygonF जो शुरू सूत्री अपने अंत बिंदु से अलग है):

QPainterPath path = new QPainterPath(); 
path.addPolygon(polygon); 
QGraphicsPathItem contour = new QGraphicsPathItem(path); 
contour.setPen(new QPen(QColor.black)); 

जब यह QGraphicsPathItem वस्तु प्रदर्शित करने, स्टार्ट-बिंदु है (सिद्धांत में) अपने अंत बिंदु से डिस्कनेक्ट।

मुझे खेद है कि यह उदाहरण कोड जावा में है; लेकिन तंत्र सी ++ के समान होना चाहिए।

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