2008-12-20 9 views
5

मेरे पास एक के * विंडो है, और इसके भीतर, एक विजेट जो ईवेंट को फ़िल्टर करने की आवश्यकता है।QWidget (qt4.4.3/kde4) पर इवेंटफिल्टर स्थापित करें

उदाहरण मैं इसे क्लिक करने की संभावना नहीं करना चाहती के लिए ...

मैं ऐसा कैसे कर सकता है?

क्या मुझे ईवेंटफिल्टर का उपयोग करना है? इस मामले में, सबसे अच्छा तरीका क्या है? \

उत्तर

2

सेट के अलावा पहले उत्तर में स्लेजहैमर दृष्टिकोण के अलावा, दो अन्य दृष्टिकोण हैं, जिनमें से एक ईवेंटफिल्टर का उपयोग करना है।

दूसरा विजेट को उपclass करना है, और फिर माउस * घटनाओं को फिर से लागू करना है। बस उन्हें खाली छोड़कर किसी भी माउस परस्पर क्रिया को रोक देगा। तो:

MyWidget: सार्वजनिक QSomeWidget { Q_OBJECT सार्वजनिक: MyWidget (QWidget * माता-पिता);

संरक्षित: शून्य माउसप्रेसवेन्ट (QMouseEvent *) {} .. आदि .. };

+0

लेकिन मेरी समस्या यह है कि मैं अपने विजेट को उपclass नहीं कर सकता, क्योंकि यह टर्मिनल इंटरफेस-> विजेट() – Giancarlo

1

QWidget एक enabled संपत्ति है:


लेकिन मेरी समस्या यह है कि मैं अपने विजेट उपवर्ग नहीं कर सकते, क्योंकि यह एक TerminalInterface- है> विजेट(), नहीं दूसरों की तरह एक वस्तु है। बस widget->setEnabled(false) पर कॉल करें और यह माउस क्लिक को स्वीकार करने से रोक देगा। यह इसकी उपस्थिति को भी संशोधित कर सकता है: उदाहरण के लिए QPushButton ग्रे हो जाएगा।

इवेंट फ़िल्टर जो आप चाहते हैं उसके लिए ओवरकिल की तरह लगते हैं।

+0

यह वही चीज़ नहीं है जो मैं चाहता हूं। मुझे घटनाओं को फ़िल्टर करने की आवश्यकता है, उन्हें अक्षम करने के लिए नहीं ... – Giancarlo

1

ऐसा लगता है कि eventFilter() वह है जो आप चाहते हैं। Event Filters

मूल रूप से आप एक वर्ग है कि QObject विरासत बनाने और उसके बाद आभासी समारोह eventFilter() लागू करने के लिए है:

यहाँ कि इस बारे में बात क्यूटी डॉक्स की धारा है। फिर उस ऑब्जेक्ट पर installEventFilter() विधि को कॉल करें जिसे आप पैरामीटर के रूप में फ़िल्टर के साथ फ़िल्टर करना चाहते हैं।

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