11
votes

Ignorer les événements de la souris et du clavier dans QT

en Qt, comment puis-je ignorer tous les événements de la souris et du clavier et d'arrêter plus tard les ignorer? C'est-à-dire que cliquez sur un bouton, ignorez tous les événements chez les enfants; Cliquez à nouveau, non ignorez. Est-ce clair? J'ai les lignes suivantes, mais je fais peut-être quelque chose de mal: xxx


1 commentaires

Remarque: setattribute (qt :: wa_transparentformousevents); - rend le widget transparent pour les événements de la souris; SetEnabled (FALSE); - Le widget ignore les événements de la souris et du clavier (mais les consommez silencieusement toujours, il apparaît).


4 Réponses :


5
votes

Vous pouvez utiliser: xxx

Il désactive les événements de la souris et du clavier pour un widget.


0 commentaires

9
votes

Vous pouvez utiliser des filtres d'événements sur vos événements de souris et de clavier pour filtrer quelques keyPress ou Mouseclick lorsque vous en avez besoin:

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


0 commentaires

4
votes

Voulez-vous dire pour un qgraphicsitem?

Si oui, vous pouvez appeler p> xxx pré>

et pour activer l'événement plus tard, car l'élément ne reçoit plus d'événements, vous devez passer par la scène, Parce que vous ne pouvez pas recevoir directement événement sur l'article.
Si votre problème n'utilise pas les frameworks graphiquesview, mais une autre partie de QT, c'est presque le même processus:
Vous pouvez appeler: P>

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


0 commentaires

12
votes

Ne pas utiliser SetFocuspolicy (QT :: Nofocus); et il propagera des événements au parent. Utilisez uniquement Setattribute (qt :: wa_transparentformousevents);


2 commentaires

Yay! Cela a fonctionné pour mon QTableView que je voulais utiliser uniquement des contrôles de navigation du clavier.


Y a-t-il un moyen similaire d'ignorer les événements du clavier?