Составители:
Рубрика:
104
и приведения в стиле чистого C. После обработки события
следует сообщить очереди событий, что оно уже обработано и
в дальнейшей обработке не нуждается:
touchevent->accept();
return true;
Для тех событий, которые не относятся к тачскрину,
вызывается обработчик класса-родителя:
return MImageWidget::event(event);
Каждое событие тачскрина содержит список точек
touchPoints(), обычно состоящий из одной точки, которые мы
будем использовать для рисования на изображении – просто
соединяя предыдущую и текущую точку линией. В
приложении это происходит прямо в обработчике событий –
виджет выдает текущий QPixmap, на который с помощью
QPainter наносится линия и обновленный QPixmap
устанавливается виджету. Конечно, это не самое оптимальное
с точки зрения производительности и организации программы
решение. Правильнее было бы вынести из обработчика все
ресурсоемкие операции, такие как обновление изображения,
или вообще перенести их в специальный обработчик
paintEvent(), отвечающий за отрисовку графических виджетов.
Чтобы сэкономить ресурсы, отрисовка производится не для
каждой следующей точки, а только в случае, если расстояние
между точками превышает определенный порог (или в случае,
когда эта точка последняя).
К сожалению, несмотря на перехват событий тачскрина в
MyWidget, они все равно продолжают попадать в компоновщик
в виде gestures, и одновременно с рисованием на виджете
происходит его движение внутри главного окна приложения.
Чтобы избавится от этого нежелательного эффекта,
необходимо также перехватить события gesture, для этого надо
использовать метод
grabGesture(Qt::PanGesture);
Страницы
- « первая
- ‹ предыдущая
- …
- 102
- 103
- 104
- 105
- 106
- …
- следующая ›
- последняя »
