Russian Qt Forum
Ноябрь 01, 2024, 10:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
(РЕШЕНО) Событие при наведении на QGraphicsLineItem
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: (РЕШЕНО) Событие при наведении на QGraphicsLineItem (Прочитано 10991 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #15 :
Февраль 06, 2015, 10:02 »
Можно установить нужную толщину (напр 2*2 = 4) и проверить получается ли нужный захват. Если да то перекрыть paint где рисовать своим pen'ом. Впрочем расстояния до отрезка это не даст.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #16 :
Февраль 06, 2015, 12:59 »
Цитата: Old от Февраль 06, 2015, 03:49
Цитата: Гурман от Февраль 06, 2015, 00:08
Хм... А ведь линия отзывается на мышь не в таком boundingRect, как я думал.
В методе:
QPainterPath QGraphicsItem::shape () const [virtual]
можно более детельно описать форму объекта.
Фигура проверяется уже после положительной проверки на бокс.
Очевидно это и сделано по-умолчанию для линий. Методы hoverEnterEvent() и hoverLeaveEvent() срабатывают на расстоянии 2 пиксела от линии (я вычислил расстояние и вывел его в qDebug() в этих методах), под любым её углом и при любом направлении. То есть, в случае линий не надо сканировать айтемы на сцене в поисках линий, не надо переопределять boundingBox(), вообще ничего не надо делать, кроме переопределения hoverEnterEvent(), hoverLeaveEvent() и аналогичных методов, в которых делается всё, что требуется. В документации об этом ни слова.
Записан
2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #17 :
Февраль 06, 2015, 13:11 »
Цитата: Гурман от Февраль 06, 2015, 12:59
В документации об этом ни слова.
Цитата: 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
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #18 :
Февраль 06, 2015, 13:22 »
Цитата: GreatSnake от Февраль 06, 2015, 13:11
Цитата: Гурман от Февраль 06, 2015, 12:59
В документации об этом ни слова.
Цитата: 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() - это перерисовка айтема. Тут речь была об определении факта приближения к линии, что к перерисовке не имеет никакого отношения.
Цитата: GreatSnake от Февраль 06, 2015, 13:11
И не проще ли было сразу взять и попробовать
Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости. Спросить в форуме изначально гораздо проще.
Записан
2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #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
Сообщений: 11445
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #20 :
Февраль 06, 2015, 13:59 »
Цитата: Гурман от Февраль 06, 2015, 13:22
Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости.
Ну отдыхайте, наверное очень устали от такой сложной задачи
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #21 :
Февраль 06, 2015, 14:03 »
Цитата: GreatSnake от Февраль 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).
А тут сказано только, что этот метод включает и выключает прием событий hover. Но ничего не сказано
где
по отношению к айтему эти события генерятся, когда включены. По-умолчанию
где
определяется с помощью boundingRect(). В случае линии, это уже не так, очевидно используется shape(). А об этом нет нигде ни слова.
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #22 :
Февраль 06, 2015, 14:03 »
Цитата: Igors от Февраль 06, 2015, 13:59
Цитата: Гурман от Февраль 06, 2015, 13:22
Нет. Чтобы попробовать, пришлось написать функцию вычисления расстояния до линии от точки на плоскости.
Ну отдыхайте, наверное очень устали от такой сложной задачи
Минут 30 заняло. Написать в форум - меньше минуты.
Записан
2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #23 :
Февраль 06, 2015, 14:32 »
Цитата: Гурман от Февраль 06, 2015, 14:03
Минут 30 заняло. Написать в форум - меньше минуты.
Плюс дождаться ответа, выразить справедливое возмущение бестолковыми советами, написать еще, уточнить и.т.п.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Событие при наведении на QGraphicsLineItem
«
Ответ #24 :
Февраль 06, 2015, 16:11 »
Цитата: Igors от Февраль 06, 2015, 14:32
Цитата: Гурман от Февраль 06, 2015, 14:03
Минут 30 заняло. Написать в форум - меньше минуты.
Плюс дождаться ответа, выразить справедливое возмущение бестолковыми советами, написать еще, уточнить и.т.п.
В ожидании ответа другие вещи делаются (у меня в ToDo list еще больше сотни позиций). Всё остальное - секунды. 180 символов в минуту десятипальцевый слепой набор.
В форум заглянуть и ответы проверить - это вместо перекура, давно бросил. А отдыхать несомненно надо. Обязательно. Сегодня пятница. Водка уже стынет в морозилке. Куриные котлеты в ореховой панировке по-турецки жарятся на плите...
«
Последнее редактирование: Февраль 06, 2015, 16:16 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...