La boucle d'événements principale de Qt (QCoreApplication::exec()) récupère les événements du système de fenêtrage natif de la file d'attente d'événements, les traduit en QEvents et envoie les événements traduits à QObjects.
En général, les événements proviennent du système de fenêtres sous-jacent (spontaneous() renvoie true), mais il est également possible d'envoyer manuellement des événements en utilisant QCoreApplication::sendEvent() et QCoreApplication::postEvent() (spontaneous() renvoie false).
Les QObjects reçoivent des événements en faisant appeler leur fonction QObject::event(). La fonction peut être réimplémentée dans des sous-classes pour personnaliser la gestion des événements et ajouter des types d'événements supplémentaires*; QWidget::event() est un exemple notable. Par défaut, les événements sont distribués aux gestionnaires d'événements tels que QObject::timerEvent() et QWidget::mouseMoveEvent(). QObject::installEventFilter() permet à un objet d'intercepter des événements destinés à un autre objet.
Le QEvent de base ne contient qu'un paramètre de type d'événement et un drapeau "accepter". L'indicateur d'acceptation est défini avec accept() et effacé avec ignore(). Il est défini par défaut,
mais ne vous y fiez pas car les sous-classes peuvent choisir de l'effacer dans leur constructeur.
Les sous-classes de QEvent contiennent des paramètres supplémentaires qui décrivent l'événement particulier.
Partager