Прежде всего, давайте разобраться в том, что является причиной проблемы. Подсказки должны скрываться, когда пользователь перемещает курсор мыши не выше них. Итак, когда вы отпускаете кнопку мыши где-то в другом месте, ваша ОС ловит событие мыши не над подсказкой (не рядом с начальной точкой этой всплывающей подсказки), поэтому скрывает всплывающую подсказку.
Итак, мое решение следующее: создайте 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);
Коллекция ссылок по теме: http://stackoverflow.com/a/21365874/2707359 – Ilya
я видел перед этим соответствующими ссылками. Но не помогло решить проблему. – user2984369