8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
1

GraphicsItem под курсором

29.04.2014, 00:18. Показов 1306. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Подскажите пожалуйста, как определить, находится GraphicsItem под курсором или нет?
Вообще нужно определить на него ли пользователь нажал.
Пробую с isUnderMouse работать - не выходит. Вообще Qt даже очень странно реагирует)) я бы сказал выдаёт фокусы, как Buileder))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2014, 00:18
Ответы с готовыми решениями:

Определение объекта под курсором
Ну вопрос в сабжекте, то есть есть класс - наследник QGraphicsItem, в общем он является как бы...

Позиция полигона под курсором
Приветствую всех. Дамы и господа, подскажите пожалуйста. Есть ли у Qgraphicspolygonitem какая либо...

Выделение текста под курсором в QWebView
У меня есть QWebView объект, я устанавливаю туда html-ну. при клике правой кнопкой мыши я показываю...

Подсветка строки под курсором в qTableView
Есть виджет наследуемый от qTableView с переопределенными интерфейсами drag and drop(вместо ячейки...

10
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2014, 01:05 2
Лучший ответ Сообщение было отмечено The_Prophet как решение

Решение

Цитата Сообщение от The_Prophet Посмотреть сообщение
Вообще Qt даже очень странно реагирует)) я бы сказал выдаёт фокусы, как Buileder))
Может просто руки-крюки или факир был пъян и фокус не удался?

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

http://doc.crossplatform.ru/qt... ClickEvent

http://doc.crossplatform.ru/qt... ClickEvent
http://doc.crossplatform.ru/qt... l#itemAt-2
1
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
29.04.2014, 01:06  [ТС] 3
Avazart, с руками всё в порядке.
Итемы созданы конечно. Метод я написал. Он кажется совсем простым, но тем не менее true не возвращает, только false. При том когда курсор над элементом он ни false, ни true не выдаёт. Если в условие if записать, то и действие на true не выполняется, только false.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2014, 01:10 4
Цитата Сообщение от The_Prophet Посмотреть сообщение
Avazart, с руками всё в порядке.
А такое в печатление что нет, если нормально все с руками то почему до сих пор сой код не примели ? Или все гадать должны что у вас там за false/true ?
0
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
29.04.2014, 02:16  [ТС] 5
Avazart, какое это имеет отношение к рукам?))
Тут нечего приводить, одна строчка:
C++ (Qt)
1
if(scene->items().at(i)->isUnderMouse()) qDebug() << "wwwww";
Вообще кода не мало, поэтому скидывать не буду. Тем более всё остальное работает.
При нажатии на ЛКМ, когда активен определённый экшион на тулбаре, циклом запускается эта строка. Если выводить qDebug() << "wwwww"; прямо перед циклом, текст выводится.
Если же добавить "!"
C++ (Qt)
1
if(!scene->items().at(i)->isUnderMouse()) qDebug() << "wwwww";
тогда выводится и в цикле тоже. Конечно если кликнуть не на элемент.
При всём при этом, если ввести какую-нибудь дополнительную переменную и пытаться присвоить ей значение в ифе, где добавлен "!", значение переменной не меняется, хоть код по идее выполняется.
0
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
29.04.2014, 09:59 6
The_Prophet, если вам необходимо отлавливать события мыши на QGraphicsItem, то лучше всего создать свой класс наследник от QGraphicsItem и переопределить нужные вам методы:
mouseMoveEvent(...)
mousePressEvent(...)
mouseReleaseEvent(...)
hoverEnterEvent(...)
hoverLeaveEvent(...)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2014, 12:30 7
Цитата Сообщение от The_Prophet Посмотреть сообщение
Avazart, какое это имеет отношение к рукам?))
Прдон не только руки, но и зрение, ибо вы не смотрели те ссылки которые я кинул, и вообще не читали что я написал.
0
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
29.04.2014, 13:44  [ТС] 8
Avazart, вы не правы. Я перешёл во всем ссылкам, которые вы дали. И я в курсе, что существуют альтернативные методы решения моей задачи. Но вы похоже не понимаете, что прошлое сообщение было об ошибке, с которой я столкнулся.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2014, 13:52 9
Альтернативное ? А как можно сделать иначе ? Без наследования ?
0
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
29.04.2014, 14:04  [ТС] 10
Avazart,
Альтернативные решения моему решению... может у меня проблемы с руками, но у вас явно не всё в порядке с пониманием грамматики.
В любом случае ответ я получил. Спасибо.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2014, 14:14 11
Вам говорят что ваше решение никакое не решение, а вы уперлись и говорите про какую-то ошибку.
Уже изложили как можно/нужно решать вашу задачу, а именно через наследование и переопределние приватных методов.
0
29.04.2014, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2014, 14:14
Помогаю со студенческими работами здесь

SetPos() не перемещает GraphicsItem по GraphicsScene
Всем здравствуйте. Есть кнопка, при клике на которую ступенчато добавляются квадраты. Затем этим...

Не работает двойной клик для GraphicsItem
Пишу программу для рисования графов. Хочу при двойном клике по вершинам и рёбрам графа вызывать...

Форма под курсором
Подскажите пожалуйста: я нажимаю на ячейку в StrigGrid и открывается еще одна форма, как сделать...

Мерцание слова под курсором
Мне надо, чтоб при нажатии клавиши F5 слово, на котором находится курсор начало мигать. Если нажать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru