2010-02-04 15 views
9

In Qt, come posso ignorare tutti gli eventi del mouse e della tastiera e in seguito smettere di ignorarli? Cioè: fai clic su un pulsante, ignora tutti gli eventi nei bambini; clicca di nuovo, non ignorare. È chiaro? Ho le seguenti righe, ma forse sto facendo qualcosa di sbagliato:Ignora eventi mouse e tastiera in Qt

setAttribute(Qt::WA_TransparentForMouseEvents); 

setFocusPolicy(Qt::NoFocus); 
+0

Nota: 'setAttribute (Qt :: WA_TransparentForMouseEvents);' - rende il widget trasparente per gli eventi del mouse; 'setEnabled (false);' - fa in modo che il widget ignori eventi di mouse e tastiera (ma li consumi silenziosamente, appare). – mlvljr

risposta

3

si potrebbe usare:

QWidget::setEnabled(false) 

si disabilita gli eventi del mouse e della tastiera per un widget.

8

È possibile utilizzare filtri Eventi del mouse e della tastiera di eventi per filtrare un po 'di pressione di un tasto o click del mouse quando si ha bisogno in modo da:

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); 
    } 
} 

maggiori informazioni nella: http://qt.nokia.com/doc/4.6/eventsandfilters.html

Spero che aiuti!

4

Intendi per un oggetto QGraphics?

Se sì, è possibile chiamare

void QGraphicsItem::setEnabled (bool enabled) 

E per attivare l'evento più tardi, come elemento non riceve gli eventi più, devi passare dalla scena, perché non è possibile ricevere direttamente evento sull'elemento.
Se il problema non sta usando GraphicsView quadri, ma dall'altra parte di qt, è quasi lo stesso processo:
È possibile chiamare:

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

Al fine di riattivare il widget, basta rilevare stampa evento all'interno di un oggetto nella tua applicazione per poter chiamare `setEnable (true) sul tuo widget!

Spero che aiuti! `

8

Non utilizzare setFocusPolicy (Qt :: NoFocus); e propagherà gli eventi al genitore. Utilizzare solo setAttribute (Qt :: WA_TransparentForMouseEvents);

+0

Yay! Questo ha funzionato per il mio QTableView che volevo utilizzare solo i controlli di navigazione della tastiera per. – TheGerm

Problemi correlati