2016-06-17 9 views
1

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

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

+0

Коллекция ссылок по теме: http://stackoverflow.com/a/21365874/2707359 – Ilya

+0

я видел перед этим соответствующими ссылками. Но не помогло решить проблему. – user2984369

ответ

0

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

Итак, мое решение следующее: создайте 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); 
+0

На самом деле я решил решить с помощью таймера, но я этого не хотел. Теперь я не думаю, что другого выбора нет. Создайте таймер, как вы, и решите проблему. благодаря – user2984369

 Смежные вопросы

  • Нет связанных вопросов^_^