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);