Qt

2010-02-04 12 views
9

क्यूटी में माउस और कीबोर्ड ईवेंट को अनदेखा करें, मैं सभी माउस और कीबोर्ड ईवेंट को कैसे अनदेखा कर सकता हूं और बाद में उन्हें अनदेखा करना बंद कर सकता हूं? यही है: एक बटन पर क्लिक करें, बच्चों में सभी घटनाओं को अनदेखा करें; फिर से क्लिक करें, अनदेखा नहीं करें। स्पष्ट है क्या? मैं निम्नलिखित लाइनों है, लेकिन शायद मैं कुछ गलत कर रहा हूँ:Qt

setAttribute(Qt::WA_TransparentForMouseEvents); 

setFocusPolicy(Qt::NoFocus); 
+0

नोट: 'सेट एट्रिब्यूट (क्यूटी :: WA_TransparentForMouseEvents); '- माउस घटनाओं के लिए विजेट पारदर्शी बनाता है; 'सेट सक्षम (झूठा);' - विजेट माउस और कीबोर्ड घटनाओं को अनदेखा करता है (लेकिन चुपचाप उन्हें अभी भी उपभोग करता है, ऐसा प्रतीत होता है)। – mlvljr

उत्तर

3

आप इस्तेमाल कर सकते हैं:

QWidget::setEnabled(false) 

यह एक विजेट के लिए माउस और कीबोर्ड की घटनाओं को अक्षम करें।

8

जब आप ऐसा जरूरत है आप अपने माउस और कीबोर्ड की घटनाओं पर घटनाक्रम 'फिल्टर का उपयोग कर सकते कुछ कुंजी दबाने फ़िल्टर या माउस क्लिक करने के लिए:

yourWidget->installEventFilter(this); 

... इस पर

bool YourFrm::eventFilter(QObject* pObject, QEvent* pEvent) 
{ 
    if (pEvent->type() == QEvent::KeyPress) 
    { 
     QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(pEvent); 
     int PressedKey = pKeyEvent->key(); 

     if(PressedKey == Qt::Key_Return) 
     { 
      // Filter Return key.... 
      return true; 
     } 

     // standard event processing 
     return QObject::eventFilter(pObject, pEvent); 
    } 
    else if (pEvent->type() == QEvent::MouseButtonPress) 
    { 
     QMouseEvent* pMouseEvent = static_cast<QMouseEvent*>(pEvent); 

     ... // etc... 
    } 
    else 
    { 
     // standard event processing 
     return QObject::eventFilter(pObject, pEvent); 
    } 
} 

अधिक जानकारियां: http://qt.nokia.com/doc/4.6/eventsandfilters.html

उम्मीद है कि यह मदद करता है!

4

क्या आपका मतलब QGraphicsItem के लिए है?

हां, तो आप

void QGraphicsItem::setEnabled (bool enabled) 

कॉल कर सकते हैं और बाद में घटना को सक्रिय करने के लिए, आइटम की घटनाओं किसी भी अधिक प्राप्त नहीं होता है, तब तक आप, दृश्य से पारित करने के लिए है, क्योंकि आप सीधे प्राप्त नहीं कर सकते आइटम पर घटना।
आप कॉल कर सकते हैं:
आपकी समस्या GraphicsView फ़्रेमवर्क, लेकिन क्यूटी के अन्य भाग का उपयोग नहीं कर रहा है, तो यह लगभग एक ही प्रक्रिया है

QWidget::setEnabled(false) //like Massimo said 

आदेश में विजेट को पुनः सक्रिय करने के लिए, बस एक वस्तु के अंदर प्रेस घटना का पता लगाने के अपने आवेदन में अपने विजेट पर 'setEnable (true) को कॉल करने में सक्षम होने के लिए!

उम्मीद है कि यह मदद करता है! `

8

सेटफोकस पॉलिसी (क्यूटी :: नोफोकस) का उपयोग न करें; और यह माता-पिता को घटनाओं का प्रचार करेगा। केवल setAttribute (Qt :: WA_TransparentForMouseEvents) का उपयोग करें;

+0

यय! यह मेरे QTableView के लिए काम करता है कि मैं केवल कीबोर्ड नेविगेशन नियंत्रणों का उपयोग करना चाहता था। – TheGerm

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