QToolTip::showText исчезает после отпускания мыши

Я хочу показать подсказку на QGLWidget, но я должен позвонить; QToolTip::showText(pos, "Message", qglwidgetPtr, rect(), 5000); в другом классе.

Таким образом, всплывающая подсказка исчезает после отпускания кнопки мыши. Если я не отпущу его, всплывающая подсказка исчезнет после 5000 мсек. Я не понимаю исчезнувшей проблемы. Я думаю, что это может быть причиной исчезновения события рисования виджета QGL, но я не уверен.

1 ответ

Прежде всего, давайте разберемся, в чем суть проблемы. Подсказки должны скрываться, когда пользователь перемещает курсор мыши не над ними. Таким образом, когда вы отпускаете кнопку мыши где-то еще, ваша ОС ловит событие мыши не над подсказкой (не рядом с начальной точкой этой подсказки), поэтому она скрывает подсказку.

Итак, мое решение следующее: создать QTimer и показывайте всплывающую подсказку несколько раз в секунду столько, сколько вам нужно (5 секунд). Вы можете сделать это, потому что в документации сказано, что

Если текст совпадает с отображаемой подсказкой, подсказка не будет двигаться

(т.е. это нормально звонить showText много раз с одним и тем же текстом)

Для создания таймера вы можете использовать этот код:

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(100); // ten times per second

И внутри тела update() Функция позволяет сравнивать текущее время и время первого отображения этой всплывающей подсказки, а также показывать всплывающую подсказку, если она все еще необходима (то есть, если она отображается менее 5 секунд).

howLongShown = curTime - startTime; // startTime here is the moment of first showing of the tooltip
if (howLongShown < 5000)
  QToolTip::showText(pos, "Message", qglwidgetPtr, rect(), 5000 - howLongShown);
Другие вопросы по тегам