Russian Qt Forum
Ноябрь 27, 2024, 10:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Событие от мышки при наведении на кнопку  (Прочитано 8622 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Сентябрь 25, 2006, 08:38 »

Возникла такая проблемка.
Если навестись мышкой на любую кнопку на форме или элемент, должно выскочить событие, по которому покажу справку на кнопку.

Как это реализовать?
Записан
Alexei
Гость
« Ответ #1 : Сентябрь 25, 2006, 08:59 »

Похоже, кроме void mouseMoveEvent (QMouseEvent* event) ничего подходящего нет.
Записан
ElderOrb
Гость
« Ответ #2 : Сентябрь 25, 2006, 10:21 »

может QWidget::setToolTip() для всех элементов формы  ?
Записан
Dendy
Гость
« Ответ #3 : Сентябрь 25, 2006, 10:29 »

Смотреть:
QWidget::enterEvent()
QHoverEvent
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Сентябрь 25, 2006, 11:27 »

mouseMoveEvent  замечетельно бы подошло
но там нет имени виджета от которого пришло!
хотелочь бы обрабатывать все в общем потоке

добавлено спустя 3 минуты:

 что хотелось бы

есть форма от дизайнера, не хотелось бы обрабатывать для каждой кнопки свое событие отдельно

а обрабатывать в общем потоке, сравнивая указатель на виджет
Записан
ElderOrb
Гость
« Ответ #5 : Сентябрь 25, 2006, 11:49 »

Цитата: "Admin"
mouseMoveEvent  замечетельно бы подошло
но там нет имени виджета от которого пришло!
хотелочь бы обрабатывать все в общем потоке

добавлено спустя 3 минуты:

 что хотелось бы

есть форма от дизайнера, не хотелось бы обрабатывать для каждой кнопки свое событие отдельно

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


В таком случае самое простое - это наставить на все виджэты фильтром какой-нить QObject и в eventFilter-е этого QObject-а поотлавливать всё о чём писал Dendy. Получится как раз всё в одном месте. А вместо имени виджэта для идентификации можно будет использовать objectName().
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #6 : Сентябрь 25, 2006, 15:48 »

Если короткая справка, то устанавливай значение свойства ToolTip.
Очень просто в дизайнере или в интеграции.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Сентябрь 25, 2006, 17:22 »

да нет справка длинная

пользователь навел мышу на кнопку
и тут же на форме вывелось большой текст
Записан
Dendy
Гость
« Ответ #8 : Сентябрь 25, 2006, 17:30 »

Ещё один некрасивьІй способ, но имеющий право на жизнь - создать свой стиль:

Код:
void MyStyle::polish( QWidget * widget )
{
  QPushButton * button = qobject_cast<QPushButton*>( widget );
  if ( button )
    button->installEventFilter( this );
}

bool MyStyle::eventFilter( QObject * o, QEvent * e )
{
  QPushButton * button = qobject_cast<QPushButton*>( o );
  if ( button && e->type() == QEvent::Hover )
  {
    // popup tip
  }
}


Ещё один способ - навешивать фильтр на родительский обьект и ловить QChildEvent. На пойманньІй дочерний обьект тоже вешаем фильтр. Дальше - то же самое: ловить QEvent::Hover от кнопок аль других виджетов, для которьІх нуна вьІводить подсказки.
Записан
yshurik
Гость
« Ответ #9 : Сентябрь 25, 2006, 21:12 »

По поводу mouseMoveEvemt() - в Qt4 он будет работать при setMouseTracking(true);
(Это так, для справки)
Записан
bigirbis
Гость
« Ответ #10 : Сентябрь 27, 2006, 10:07 »

Можно так:
Код:
QPushButton * button = new QPushButton( tr( "name" ), this );
button->setToolTip( tr( "Your text" ) );
button->installEventFilter( this );

Код:
eventFilter( QObject * object, QEvent * event )
{
 QWidget * widget = dynamic_cast < QWidget * > ( object );
 if ( widget && event->type() == QEvent::ToolTip )
 {
  QString tip = widget->toolTip();
 }
}

Потом уже можно месить что угодно...
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #11 : Сентябрь 27, 2006, 10:53 »

да! такая простая задача, а сколько способов Улыбающийся
Записан
bigirbis
Гость
« Ответ #12 : Сентябрь 27, 2006, 11:10 »

Опыт показывает, что надо работать с QEvent::ToolTip - это поможет избежать мерцаний и написаний алгоритмов, которые уже давно реализованы (тем паче, что иначе придется QTimer подключать и пр.).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.159 секунд. Запросов: 23.