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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение нажатия по QPixmap  (Прочитано 3350 раз)
arz.maslov
Гость
« : Апрель 05, 2013, 09:24 »

Всем доброго дня.
Ситуация следующая.
Создал класс наследник от QWidget. В классе происходит отрисовка 2-х картинок (картинки представляют из себя 2 круга разного диаметра с центрами в одной точке).
Нужно определить в методах mousePressEvent и wheelEvent (следовательно координаты курсора знаю) по какой из картинок было произведено нажатие.

P.S. Была идея реализовать отрисовку и действия над картинками в разных классах, но сам по себе widget прямоугольный,а картинка круглая, следовательно при нажатии в угол виджета пользователь как бы будет нажимать на картинку нижнего "слоя". а отрабатывать будет нажатие по верхнему "слою".

Подскажите как можно определить это?
Записан
arz.maslov
Гость
« Ответ #1 : Апрель 05, 2013, 09:39 »

Задача решена!
Вспомнил про пример из документации "Animated Tiles Example".
Реализацию буду разделять на два класса наследованных от QGraphicsWidget.
Записан
Bepec
Гость
« Ответ #2 : Апрель 05, 2013, 09:44 »

В чём проблема? У вас есть координаты клика. Координаты нижнего круга и координаты верхнего круга.

Если попадает в нижний - то по нижнему (внутреннему).

Если попадает в верхний - то по верхнему.

Если не попадает ни в один - игнорируем.
Записан
arz.maslov
Гость
« Ответ #3 : Апрель 05, 2013, 10:13 »

В чём проблема? У вас есть координаты клика. Координаты нижнего круга и координаты верхнего круга.

Если попадает в нижний - то по нижнему (внутреннему).

Если попадает в верхний - то по верхнему.

Если не попадает ни в один - игнорируем.

В том и вопрос как определитель попадает на верхний круг или нет.)
Скажи как?)))
Записан
Bepec
Гость
« Ответ #4 : Апрель 05, 2013, 10:50 »

Кхм. Проходили математику? А геометрию?

Если точка удалена от центра круга  на расстояние < радиусу круга, значит точка находится внутри круга. ( и если расстояние равно, значит она лежит на его эммм... забыл как называется Веселый )

Псевдокод алгоритма
Код:
if (Точка клика, ты принадлежишь к малому кругу?) 
{
   emit кликМалогоКруга();
   return;
}
else
    if(Точка клика, ты принадлежишь к  большому кругу?)
    {
        emit кликБольшогоКруга();
        return;
    }

qDebug() << (Точка ты нихрена не попадаешь ни на малый, ни на большой круг.)
return;    
« Последнее редактирование: Апрель 05, 2013, 12:07 от Bepec » Записан
arz.maslov
Гость
« Ответ #5 : Апрель 05, 2013, 10:54 »

Хорошо.

А можно ли определить именно нажатие по картинке, что именно было нажатие по объекту QPixmap) (это так, на будущее)))
Записан
Bepec
Гость
« Ответ #6 : Апрель 05, 2013, 12:00 »

Всё что ты отрисовал становится графикой. Но...

Но графика нарисована по координатам. 

А координаты ты знаешь.

Так же ты рисуешь на виджете. И его расположение тебе известно.

И тут вступает гениальная математика. позиция виджета + позиция нарисованной на виджете картинки = область, клик в которой тебе надо ловить.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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