Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: arz.maslov от Апрель 05, 2013, 09:24



Название: Определение нажатия по QPixmap
Отправлено: arz.maslov от Апрель 05, 2013, 09:24
Всем доброго дня.
Ситуация следующая.
Создал класс наследник от QWidget. В классе происходит отрисовка 2-х картинок (картинки представляют из себя 2 круга разного диаметра с центрами в одной точке).
Нужно определить в методах mousePressEvent и wheelEvent (следовательно координаты курсора знаю) по какой из картинок было произведено нажатие.

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

Подскажите как можно определить это?


Название: Re: Определение нажатия по QPixmap
Отправлено: arz.maslov от Апрель 05, 2013, 09:39
Задача решена!
Вспомнил про пример из документации "Animated Tiles Example".
Реализацию буду разделять на два класса наследованных от QGraphicsWidget.


Название: Re: Определение нажатия по QPixmap
Отправлено: Bepec от Апрель 05, 2013, 09:44
В чём проблема? У вас есть координаты клика. Координаты нижнего круга и координаты верхнего круга.

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

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

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


Название: Re: Определение нажатия по QPixmap
Отправлено: arz.maslov от Апрель 05, 2013, 10:13
В чём проблема? У вас есть координаты клика. Координаты нижнего круга и координаты верхнего круга.

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

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

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

В том и вопрос как определитель попадает на верхний круг или нет.)
Скажи как?)))


Название: Re: Определение нажатия по QPixmap
Отправлено: Bepec от Апрель 05, 2013, 10:50
Кхм. Проходили математику? А геометрию?

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

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

qDebug() << (Точка ты нихрена не попадаешь ни на малый, ни на большой круг.)
return;    


Название: Re: Определение нажатия по QPixmap
Отправлено: arz.maslov от Апрель 05, 2013, 10:54
Хорошо.

А можно ли определить именно нажатие по картинке, что именно было нажатие по объекту QPixmap) (это так, на будущее)))


Название: Re: Определение нажатия по QPixmap
Отправлено: Bepec от Апрель 05, 2013, 12:00
Всё что ты отрисовал становится графикой. Но...

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

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

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

И тут вступает гениальная математика. позиция виджета + позиция нарисованной на виджете картинки = область, клик в которой тебе надо ловить.