Введение в разработку приложений на платформе Atom/MeeGo для нетбуков и планшетников. Граничин О.Н - 103 стр.

UptoLike

103
Если этого не сделать, то компоновщик в некоторых
ситуациях (например, изменение ориентации устройства)
может изменить размеры виджета и координаты внутри
виджета перестанут совпадать с координатами изображения.
Возможно преобразовывать координаты на лету, но мы
вместо этого просто фиксируем размер виджета. В
приложении создан класс MyWidgetнаследник MImageWidget,
к которому относится все вышенаписанное.
Теперь надо получить информацию от тачскрина. Большая
часть информации внутри Qt передается в виде событий
наследников класса QEvent, попадающих в соответствующую
очередь, а через неек виджетам и другим элементам
приложения. События тачскрина относятся к классу
QTouchEvent и имеют всего 3 типа QEvent::TouchBegin (начало
прикосновения), QEvent::TouchUpdate (движение по тачскрину),
QEvent::TouchEnd (окончание прикосновения. По умолчанию
они не доходят до нашего виджета в неизменном виде,
система преобразует их к событиям более высокого уровня
(например, QGestureEvent) и обрабатывает в другом месте. Для
получения события тачскрина надо вызвать метод
setAcceptTouchEvents(true).
Чтобы обрабатывать события, необходимо переопределить
обработчик bool MyWidget::event(QEvent *event). Такой
обработчик есть у каждого виджета и вообще может быть
реализован у любого наследника QObject. В новом
обработчике мы проверяем тип события, и если оно относится
к тачскринувыполняем приведение типов, чтобы получить
доступ к специфичной информации:
QTouchEvent *touchevent =
static_cast<QTouchEvent*>(event);
Для приведения типов мы используем конструкцию
static_cast, использование dynamic_cast не рекомендуется, как