2016-04-19 15 views
1

Ich bin auf der Suche nach Möglichkeiten, um eine einfache benutzerdefinierte Tooltip für QGraphicsItem zu implementieren.Benutzerdefiniertes Qt QGraphicsItem tooltip

Ich weiß, dass ich setToolTip verwenden kann, um Text für Tooltip festzulegen. Jetzt möchte ich den Text dynamisch ändern, wenn die Maus an verschiedenen Stellen eines QGraphicsItem Objekts schwebt.

Was ich denke zu tun ist, wenn ich ein Ereignis QEvent::ToolTip bekomme, ändere ich den Tooltip-Text in diesem Ereignishandler. Ich kann jedoch keine Ereignisfunktion finden, die QEvent::ToolTip für QGraphicsItem empfängt.

Oder gibt es einige Möglichkeiten, ein Ereignis zu behandeln, dass die Maus für 2 Sekunden schwebt.

Wie kann ich es machen?

+0

Haben Sie ['QGraphicsItem :: sceneEvent'] (http://doc.qt.io/qt-5/qgraphicsitem.html#sceneEvent) oder [' QGraphicsItem :: sceneEventFilter'] (http: // doc .qt.io/qt-5/qgraphicsitem.html # sceneEventFilter)? Es funktioniert jedoch möglicherweise nicht, da Sie möglicherweise in einer Schleife landen, in der Sie den Tooltip-Text ständig ändern. Eine bessere Lösung könnte die Verwendung von Child 'QGraphicsItem's sein. – thuga

+0

Ich habe eine neue Klasse implementiert, die 'QGraphicsItem' übernimmt. Und 'QGraphicsItem :: sceneEvent' erhält 'QEvent :: ToolTip' nicht, was auftritt, wenn ein Tooltip angefordert wird. Ich denke, eine Substitution für 'QEvent :: ToolTip' ist ein Ereignis, bei dem die Maus für 2 oder 3 Sekunden schwebt und bleibt. Aber ich habe keine Ahnung, wie ich es machen soll. – Paler

Antwort

0

Sie konnten die hoverMoveEvent in Ihrer abgeleiteten QGraphicsItem Klasse implementieren und set the tooltip basierend auf der Position innerhalb des Grafik Artikel

void MyItem::hoverMoveEvent(QGraphicsSceneHoverEvent* event) 
{ 
    QPointF p = event->pos(); 
    // use p.x() and p.y() to set the tooltip accrdingly, for example: 
    if (p.y() < height()/2) 
     setTooltip("Upper Half"); 
    else 
     setTooltip("Bottom Half"); 
} 

Beachten Sie, dass Sie enable hover events für Ihren Artikel haben.

+0

Ein Tooltip muss angezeigt werden, wenn die Maus für ein paar Sekunden schwebt und bleibt, aber nicht in dem Moment, in dem die Maus schwebt. Das macht 'QEvent :: ToolTip'. – Paler

Verwandte Themen