Доступ к координатам в щелчке QPushbutton - PullRequest
2 голосов
/ 11 августа 2011

У меня есть QPushButton с изображением, в котором есть две области, которые я хочу обрабатывать по-разному при нажатии.Из-за расположения на изображении я не могу использовать отдельные кнопки для двух изображений.

Я хотел бы, чтобы в слоте, где я обрабатываю щелчок, он проверял координатыщелчок, чтобы определить, какая область была нажата.

Есть ли способ получить к нему доступ?

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Это то, что приходит на ум первым. Это должно работать, хотя может быть более простой способ:

  • Создайте свой собственный класс, производный от QPushButton.
  • Переопределите необходимые события мыши (mousePressEvent и mouseReleaseEvent) и, прежде чем вызывать реализацию базового класса, установите свойство в вашем объекте, используя setProperty с положением щелчка мыши. (Положение доступно из параметра события.)
  • В слоте, обрабатывающем событие, используйте sender(), чтобы получить кнопку, и прочитайте свойство, используя property().

Если вам не нужно рассматривать ваш объект как базовый класс (QPushButton*), вы можете просто создать новый сигнал, который включает в себя событие мыши, и прикрепить его к вашему слоту. Тогда вам вообще не понадобится эта собственность.

1 голос
/ 11 августа 2011

Вы можете получить текущую позицию мыши, используя QCursor :: pos (), которая возвращает позицию курсора (горячую точку) в глобальных координатах экрана.

Теперь экранные координаты не просты в использовании, и, вероятно, не то, что вы хотите. К счастью, есть способ преобразовать экранные координаты в координаты относительно виджета.

QPoint _Position = _Button->mapFromGlobal(QCursor::pos());

Это должно сказать вам, где на кнопке была мышь, когда пользователь нажимал. И вы можете взять его оттуда.

0 голосов
/ 08 января 2017

Опираясь на простой механизм @ Лиз, вот что я сделал;это метод слота, который вызывается при нажатии (), но обобщается на другие ситуации.Обратите внимание, что использование pushButton-> geometry () дает вам координаты, которые уже находятся в глобальном пространстве, поэтому вам не нужно отображать mapFromGlobal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...