2010-02-01 9 views
1

J'utilise le framework Qt Graphics View pour créer une scène et attacher plusieurs vues à la même scène, où ces vues rendent une scène openscenegraph 3D en arrière-plan et les dessins 2D sont en quelque sorte des superpositions. J'essaie d'intercepter les événements mouse/key dans ma classe OverlayViewport (hérite de QGraphicsView) et de naviguer dans la scène 3D en conséquence. Ci-dessous un gestionnaire d'événements exemple:Événements QGraphicsView acceptés

void OverlayViewport::mouseMoveEvent(QMouseEvent * event) 
{ 
    QGraphicsView::mouseMoveEvent(event); 
    if (event->isAccepted()) 
    { 
     return; 
    } 

    3D_Scene_Stuff_Code(); 
} 

Mais les événements sont toujours acceptés, donc mon code stuff scène 3D exécute jamais. Si je supprime la vérification isAccepted(), mon code s'exécute toujours. Ce que je veux accomplir, c'est laisser la scène faire ses trucs comme la sélection, en faisant glisser vs, et si ça ne fait rien (n'accepte pas l'évènement), fais mon truc en 3D. Donc, voici mes questions:
1 - Suis-je sur le mauvais chemin ici?
2 - Dois-je transmettre les événements à la scène sur laquelle la vue est attachée et faire mes trucs si l'événement n'est pas accepté par la scène?
3 - Si ce n'est pas 2, comment dois-je procéder?

Cordialement.

Répondre

0

J'ai trouvé le coupable. Il semble que c'était un bug dans Qt. QGraphicsView ne définit pas correctement l'indicateur accepté de mouseMoveEvents. Cela se produit uniquement pour mouseMoveEvents, les autres événements sont bien. Il est rapporté à Qt et attend d'être réparé.

+0

Souhaitez-vous être si gentil de poster ici l'URL du rapport de bogue correspondant? J'utilise Qt 5.1 (également vérifié la Qt 5.2) et fait face au même problème. Avez-vous trouvé une solution de contournement pour votre cas? –

+0

Il semble être fixé et fermé, mais voilà: https://bugreports.qt-project.org/browse/QTBUG-8061 – erelender

+0

J'ai vu celui-là, mais il est lié à mouseDoubleClickEvent(), mais vous mentionnez mouseMoveEvent() dans votre message d'origine. C'est pourquoi j'ai demandé. –