2009-09-30 20 views
6

जब भी कोई टैब क्लिक किया जाता है तो मुझे एक संदर्भ मेनू प्रदर्शित करने की आवश्यकता होती है और उसे उस विशिष्ट टैब पर प्रतिक्रिया करने की आवश्यकता होती है। क्या इसे सबक्लासिंग किए बिना ऐसा करने का कोई तरीका है?QTabWidget टैब संदर्भ मेनू

उत्तर

5

आसान तरीका है, लेकिन संभवतः नहीं ठीक है कि तुम क्या जरूरत है:

  1. कनेक्ट 'currentChanged' अपने QTabWidget
  2. स्लॉट में जो संकेत से जुड़ा है के संकेत के लिए, एक QMenu बना सकते हैं और पॉप्युलेट के रूप में
  3. जरूरत अंत में, स्लॉट जो संकेत से जुड़ा है में, फोन QMenu :: कार्यकारी (QCursor :: स्थिति())

यह (नहीं nece जब भी टैब बदल गया है एक समारोह में कहा जाता प्राप्त होगा सैद्धांतिक रूप से क्लिक किया गया) और वर्तमान माउस स्थिति पर एक मेनू स्पॉन करें।

जटिल तरीका है, जो वास्तव में आप क्या वर्णन करता है: अपने QTabWidget पर

  1. कॉल QObject::installEventFilter, ताकि आपके QTabWidget पर सभी घटनाओं अपनी खुद की वस्तु पर पुनः निर्देशित कर रहे हैं।
  2. अपनी खुद की वस्तु में, QObject::customEvent को पुन: कार्यान्वित करें और सभी QMouseEvent ईवेंट को संभाल लें।
  3. आवश्यकतानुसार एक QMenu पॉप्युलेट करें और QMenu :: exec को QMouseEvent की स्थिति में निष्पादित करें जिसे आप संभालना चाहते हैं।
+0

आपका पहला आसान समाधान काम करता है जैसा वह चाहता है। संदर्भ मेनू प्रदर्शित नहीं किया जाएगा माउस टैब वर्तमान टैब पर किया जाता है। एकमात्र समाधान आपका दूसरा प्रतीत होता है। –

0

मुझे लगता है कि आपको अपनी खुद की कक्षा बनाने की आवश्यकता है जो QTabWidget से विरासत में है और MousePressEvent (QMouseEvent) संरक्षित फ़ंक्शन को ओवरराइड करें जिसमें आप राइट क्लिक पर अपना संदर्भ मेनू बना सकते हैं।

+0

-1 क्योंकि वह विशेष रूप से QTabWidget subclassing के बिना जो कुछ भी चाहता है उसे हासिल करने के लिए एक तरीका मांगने के लिए कहा। –

+2

यदि वह installEventFilter से परिचित नहीं है, तो विरासत एक आसान तरीका है। लेकिन उसे पहले अपना दूसरा समाधान आज़माएं। –