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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: (РЕШЕНО) Событие при наведении на QGraphicsLineItem  (Прочитано 10564 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Февраль 06, 2015, 10:02 »

Можно установить нужную толщину (напр 2*2 = 4) и проверить получается ли нужный захват. Если да то перекрыть paint где рисовать своим pen'ом. Впрочем расстояния до отрезка это не даст.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #16 : Февраль 06, 2015, 12:59 »

Хм... А ведь линия отзывается на мышь не в таком boundingRect, как я думал.
В методе:
QPainterPath QGraphicsItem::shape () const [virtual]
можно более детельно описать форму объекта.
Фигура проверяется уже после положительной проверки на бокс.

Очевидно это и сделано по-умолчанию для линий. Методы hoverEnterEvent() и hoverLeaveEvent() срабатывают на расстоянии 2 пиксела от линии (я вычислил расстояние и вывел его в qDebug() в этих методах), под любым её углом и при любом направлении. То есть, в случае линий не надо сканировать айтемы на сцене в поисках линий, не надо переопределять boundingBox(), вообще ничего не надо делать, кроме переопределения hoverEnterEvent(), hoverLeaveEvent() и аналогичных методов, в которых делается всё, что требуется. В документации об этом ни слова.
Записан

2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #17 : Февраль 06, 2015, 13:11 »

В документации об этом ни слова.
Цитата: assistant
void QGraphicsItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]
This event handler, for event event, can be reimplemented to receive hover enter events for this item. The default implementation calls update(); otherwise it does nothing.
А это что Непонимающий

И не проще ли было сразу взять и попробовать Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #18 : Февраль 06, 2015, 13:22 »

В документации об этом ни слова.
Цитата: assistant
void QGraphicsItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event ) [virtual protected]
This event handler, for event event, can be reimplemented to receive hover enter events for this item. The default implementation calls update(); otherwise it does nothing.
А это что Непонимающий

А это не то совершенно. Переводится с английского так - "умолчательная реализация вызывает update()", update() - это перерисовка айтема. Тут речь была об определении факта приближения к линии, что к перерисовке не имеет никакого отношения.

И не проще ли было сразу взять и попробовать Непонимающий

Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости. Спросить в форуме изначально гораздо проще.
Записан

2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #19 : Февраль 06, 2015, 13:29 »

Данный метод будет вызван только при QGraphicsItem::setAcceptHoverEvents( true ), в описании которой всё сказано:
Цитата: assistant
If enabled is true, this item will accept hover events; otherwise, it will ignore them. By default, items do not accept hover events.

Hover events are delivered when there is no current mouse grabber item. They are sent when the mouse cursor enters an item, when it moves around inside the item, and when the cursor leaves an item. Hover events are commonly used to highlight an item when it's entered, and for tracking the mouse cursor as it hovers over the item (equivalent to QWidget::mouseTracking).
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Февраль 06, 2015, 13:59 »

Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости.
Ну отдыхайте, наверное очень устали от такой сложной задачи  Улыбающийся
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #21 : Февраль 06, 2015, 14:03 »

Данный метод будет вызван только при QGraphicsItem::setAcceptHoverEvents( true ), в описании которой всё сказано:
Цитата: assistant
If enabled is true, this item will accept hover events; otherwise, it will ignore them. By default, items do not accept hover events.

Hover events are delivered when there is no current mouse grabber item. They are sent when the mouse cursor enters an item, when it moves around inside the item, and when the cursor leaves an item. Hover events are commonly used to highlight an item when it's entered, and for tracking the mouse cursor as it hovers over the item (equivalent to QWidget::mouseTracking).

А тут сказано только, что этот метод включает и выключает прием событий hover. Но ничего не сказано где по отношению к айтему эти события генерятся, когда включены. По-умолчанию где определяется с помощью boundingRect(). В случае линии, это уже не так, очевидно используется shape(). А об этом нет нигде ни слова.
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #22 : Февраль 06, 2015, 14:03 »

Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости.
Ну отдыхайте, наверное очень устали от такой сложной задачи  Улыбающийся

Минут 30 заняло. Написать в форум - меньше минуты.  Смеющийся
Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Февраль 06, 2015, 14:32 »

Минут 30 заняло. Написать в форум - меньше минуты.  Смеющийся
Плюс дождаться ответа, выразить справедливое возмущение бестолковыми советами, написать еще, уточнить и.т.п.  Улыбающийся
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #24 : Февраль 06, 2015, 16:11 »

Минут 30 заняло. Написать в форум - меньше минуты.  Смеющийся
Плюс дождаться ответа, выразить справедливое возмущение бестолковыми советами, написать еще, уточнить и.т.п.  Улыбающийся

В ожидании ответа другие вещи делаются (у меня в ToDo list еще больше сотни позиций). Всё остальное - секунды. 180 символов в минуту десятипальцевый слепой набор.  Смеющийся В форум заглянуть и ответы проверить - это вместо перекура, давно бросил. А отдыхать несомненно надо. Обязательно. Сегодня пятница. Водка уже стынет в морозилке. Куриные котлеты в ореховой панировке по-турецки жарятся на плите... Показает язык
« Последнее редактирование: Февраль 06, 2015, 16:16 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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