У меня есть QGraphicsView
как показывает QGraphicsScene
который содержит QGraphicsItem
, Мой предмет реализует hoverMoveEvent(...)
метод, который запускает QToolTip
,
Я хочу, чтобы подсказка следовала за мышью при ее перемещении над элементом. Это, однако, работает, только если я делаю одну из двух вещей:
QToolTip
s, где первый является просто фиктивным и немедленно перезаписывается вторым.rand()
в это текст.Эта реализация не работает должным образом. Это позволяет всплывающей подсказке появляться, но она не следует за мышью. Так же, как если бы он понимал, что его содержание не изменилось и что он не нуждается в обновлении.
void MyCustomItem::hoverMoveEvent(QGraphicsSceneHoverEvent *mouseEvent)
{
QToolTip::showText(mouseEvent->screenPos(), "Tooltip that follows the mouse");
}
Этот код создает желаемый результат. Подсказка следует за мышью. Недостатком является то, что вы можете увидеть небольшое мерцание, так как созданы две подсказки.
void MyCustomItem::hoverMoveEvent(QGraphicsSceneHoverEvent *mouseEvent)
{
QToolTip::showText(mouseEvent->screenPos(), "This is not really shown and is just here to make the second tooltip follow the mouse.");
QToolTip::showText(mouseEvent->screenPos(), "Tooltip that follows the mouse");
}
В-третьих, решение представлено Вот тоже работает. Однако я не хочу показывать координаты. Содержание всплывающей подсказки является статическим …
Как я могу сделать это без описанного мерцания, создав две всплывающие подсказки или обновив положение подсказки?
QTooltip
создается, чтобы исчезнуть, как только вы двигаете мышь, чтобы не иметь такого поведения, вы можете использовать QLabel
и включить Qt::ToolTip
флаг. В твоем случае:
.час
private:
QLabel *label;
.CPP
MyCustomItem::MyCustomItem(QGraphicsItem * parent):QGraphicsItem(parent)
{
label = new QLabel;
label->setWindowFlag(Qt::ToolTip);
[...]
}
После того, где вы хотите отобразить сообщение, в вашем случае вы хотите сделать это в hoverMoveEvent
Вы должны разместить следующий код.
label->move(event->screenPos());
label->setText("Tooltip that follows the mouse");
if(label->isHidden())
label->show();
И чтобы скрыть это вы должны использовать:
label->hide();
видеть это: Как сделать сообщение QToolTip постоянным?
Других решений пока нет …