Russian Qt Forum

Qt => Вопросы новичков => Тема начата: thechicho от Ноябрь 20, 2011, 19:42



Название: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 19:42
как сабж в кьют реализуется?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: ecspertiza от Ноябрь 20, 2011, 19:45
setToolTip() ?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 20:00
сенкс. можно рабочий пример кода? не догнал, как применить.


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: Пантер от Ноябрь 20, 2011, 20:03
label->setToolTip ("Some text");
Что не понятно???


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: ecspertiza от Ноябрь 20, 2011, 20:05
конечно можно

Код:
label->setToolTip("tool tip");


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:08
примеры кода точно рабочие?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 20:08
дак я так и сделал, только при наведении ничего не произошло, поэтому и попросил код рабочий.
тут http://developer.qt.nokia.com/forums/viewthread/6978 (http://developer.qt.nokia.com/forums/viewthread/6978) через QAction как-то что-то...
где я туплю?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:11
Я так и думал, уберите нерабочий код с форума)

По ссылке речь идет о хинтах в меню основанном на QAction. Которых действительно нет вроде.
А ты спрашивал про QLablel? Чуишь разницу?

И по той же ссылке "рабочий код", который добавляет эти хинты в меню.

Чего не так?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 20:15
упс. подсказка появляется, только не мгновенно, а через несколько секунд.
как задать мгновенное появление при наведении?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 20:19
хм. после включения проги, если поддержать пару секунд мышку на элементе, подсказка появится. затем при наведении на элемент, она начинает появляться мгновенно. но при первом наведении надо ждать несколько секунд. можно как-то сделать, чтобы сразу появлялась при 1ом наведении?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:21
Как поменять таймаут не знаю.

Можешь сам показывать, когда тебе нужно.
void QToolTip::showText ( const QPoint & pos, const QString & text, QWidget * w, const QRect & rect )


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: iroln от Ноябрь 20, 2011, 20:22
упс. подсказка появляется, только не мгновенно, а через несколько секунд.
как задать мгновенное появление при наведении?
Мне как-то раз тоже надо было, чтобы тултип показывался мгновенно при наведении на виджет. Я отлавливал событие ToolTip через метод event и выводил принудительно через QToolTip.showText. Можно ещё навесить фильтр событий, ловить событие ToolTip и делать то же самое.


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:26
А это событие возникает мгновенно (и сам QToolTip выдерживает эту паузу) или по истечении таймаута?


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: iroln от Ноябрь 20, 2011, 20:30
Вспомнил, кажется, что я там делал. Мне надо было, чтобы при наведении на некий виджет тултип сразу появлялся и двигался вслед за курсором мыши. А потом мгновенно пропадал, после того, как курсор выйдет за пределы виджета. Никак не получалось заставить тултип мгновенно пропадать, эта задержка жутко раздражала. И ещё заметил баг, позиция тултипа не обновляется если не обновилась строка текста.

Даже вот такой странный кусок кода у себя нашёл, который якобы заставляет тултип мгновенно пропадать. :)
Код
Python
#HACK: Чтобы всплывающая подсказка пропадала мгновенно (без раздражающей задержки)
e = QMouseEvent(QEvent.MouseButtonPress, event.pos(), event.globalPos(),
                        Qt.NoButton, Qt.NoButton, Qt.NoModifier)
QCoreApplication.sendEvent(self, e)
 
#QToolTip.hideText() # не работает, подсказка не пропадает мгновенно!!!
#event.ignore()
 


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: iroln от Ноябрь 20, 2011, 20:32
А это событие возникает мгновенно (и сам QToolTip выдерживает эту паузу) или по истечении таймаута?
Проверил свой код, событие возникает мгновенно. Видимо это стандартный тултип выводится с задержкой.


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:47
А это событие возникает мгновенно (и сам QToolTip выдерживает эту паузу) или по истечении таймаута?
Проверил свой код, событие возникает мгновенно. Видимо это стандартный тултип выводится с задержкой.
Спасибо, что потратил время.


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: andrew.k от Ноябрь 20, 2011, 20:49
а разве такой странный код не работает?

void QToolTip::hideText () [static]

Hides the tool tip. This is the same as calling showText() with an empty string.


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: thechicho от Ноябрь 20, 2011, 21:04
всем спасибо за поддержу.
мгновенное появление некритично (хотя если кто выложит код, а не намеки, будет здорово  :D)
Код
C++ (Qt)
label->setToolTip("туц туц туц");
label->setStyleSheet("QToolTip{color:navy}");


Название: Re: Всплывающая подсказка при наведении на QLabel
Отправлено: iroln от Ноябрь 20, 2011, 22:32
а разве такой странный код не работает?

void QToolTip::hideText () [static]

У меня почему-то не заработал. Тултип всё равно скрывался с задержкой, а вот если послать событие MouseEvent, то тултип сразу исчезает. Я, честно говоря, не разбирался почему так происходит, надо было быстро залепить что-то работающее. Может если всё сделать по уму, то и заработает как надо.

thechicho
Попробуй так:
1. Для объекта QLabel или что там, установить фильтр событий.
2. В функции eventFilter ловить событие ToolTip для этого объекта, для которого установлен фильтр, и принудительно показывать тултип через QToolTip.showText()

Могу набросать код на питоне (на С++ мне честно лень) :)