Странное поведение QToolTip, когда он должен следовать за мышью, которая находится над QGraphicsItem

У меня есть QGraphicsView как показывает QGraphicsScene который содержит QGraphicsItem, Мой предмет реализует hoverMoveEvent(...) метод, который запускает QToolTip,

Я хочу, чтобы подсказка следовала за мышью при ее перемещении над элементом. Это, однако, работает, только если я делаю одну из двух вещей:

  • Либо создать два QToolTips, где первый является просто фиктивным и немедленно перезаписывается вторым.
  • Или, во-вторых, сделайте содержимое подсказки случайным, например, сдачи 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");
}

В-третьих, решение представлено Вот тоже работает. Однако я не хочу показывать координаты. Содержание всплывающей подсказки является статическим …

Как я могу сделать это без описанного мерцания, создав две всплывающие подсказки или обновив положение подсказки?

0

Решение

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 постоянным?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]