2012-05-26 9 views
8

क्या कोई पॉपअप दिखाने का कोई तरीका है जब उपयोगकर्ता दृश्य के खाली हिस्से पर सही क्लिक करता है?QGraphicsScene पर एक पॉपअप मेनू दिखा रहा है या क्लिक करें

मैं क्यूटी में नया हूं और मैंने स्लॉट और सबक्लासिंग की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है।

ऐसा कोई स्लॉट और क्रमश:

"error: 'QMouseEvent' has not been declared"

जब onMouseRelease घटना को लागू करने की कोशिश कर रहा।

उत्तर

10

QGraphicsView QGraphicsScene की सामग्री को प्रदर्शित करने के लिए उपयोग किया जाने वाला विजेट है। तो संदर्भ मेनू (पॉपअप मेनू) को लागू करने के लिए सही जगह QGraphicsView है।

आप reimplement को contextMenuEvent समारोह QGraphicsView से विरासत में मिला अपने ही वर्ग है की जरूरत है:

void YourGraphicsView::contextMenuEvent(QContextMenuEvent *event) 
{ 
    QMenu menu(this); 
    menu.addAction(...); 
    menu.addAction(...); 
    ... 
    menu.exec(event->globalPos()); 
} 

भी देखें क्यूटी के Menus Example

+0

धन्यवाद! यह काम किया, लेकिन मुझे कुछ बदलाव करने की जरूरत थी। 1. सबसे पहले, चूंकि मेरा प्रोजेक्ट टाइप क्यूटी जीयूआई एप्लीकेशन है, इसलिए मुझे दिए गए क्यूग्राफिक्स व्यू को अपने आप से बदलना होगा। मैंने मैन्युअल रूप से .ui फ़ाइल को संपादित करके और ऑब्जेक्ट के लिए क्लास नाम को बदलकर किया। 2. मैंने QGraphicsView उपclassing के लिए निम्न उदाहरण का उपयोग किया: http://doc.trolltech.com/4.3/graphicsview-elasticnodes.html। मुझे मूल विजेट के लिए पैरामीटर शामिल करने के लिए कन्स्ट्रक्टर को संशोधित करना था: GraphWidget (QWidget * पैरेंट) [...]। फिर बस इस वर्ग में संदर्भ मेनू घटना को लागू करने से चाल चल गई। – TudorT

+0

क्या मैं इसे अलग-अलग कर सकता हूं, शायद मैन्युअल रूप से .ui फ़ाइल को मैन्युअल रूप से संशोधित किए बिना? – TudorT

+0

विजेट के संदर्भ मेनू में "प्रचार करने के लिए ..." कार्रवाई का उपयोग करके आप क्यूटीक्रिएटर के डिज़ाइन व्यू में QGraphicsView से विजेट क्लास को अपनी कक्षा में भी बदल सकते हैं। –

7

आप को फिर से लागू कर सकते हैं दृश्य का उपयोग करने QGraphicsScene वर्ग, दे देंगे जिनमें से contextMenuEvent विधि के साथ ही स्क्रीन निर्देशांक (के रूप में QGraphicsView है, जो भी काम करता है लेकिन यह जानकारी नहीं है के खिलाफ) निर्देशांक:

void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) 
{ 
    // event->scenePos() is available 
    QMenu menu(this); 
    menu.addAction(...); 
    menu.addAction(...); 
    ... 
    menu.exec(event->screenPos()); 
} 
+1

यह एक अच्छा समाधान है। क्यूमेनू मेनू (यह); काम नहीं करता आप QMenu मेनू (ईवेंट-> विजेट()) का उपयोग कर सकते हैं; QMenu के QWidget माता-पिता के रूप में कार्य करने के लिए सक्रिय विजेट प्राप्त करने के लिए। – gamecreature

+1

वास्तव में, ऐसा लगता है कि मेनू को माता-पिता को देने की आवश्यकता नहीं है। क्यूमेनू मेनू() ठीक काम करता है, क्योंकि संदर्भ मेनू एक विंडो है जो अपने दाहिने हिस्से में है और स्क्रीन निर्देशांक में स्थित है। –

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