2D графика. QPainter

Содержание

Слайд 2

Тремя наиболее важными xарактеристиками QPainter являются перо (pen), кисть (brush) и

Тремя наиболее важными xарактеристиками QPainter являются перо (pen), кисть (brush) и

шрифт (font).
Перо используется для рисования линий и границ геометрических фигур. Оно характеризуется такими параметрами, как: цвет, толщина, стиль рисования линий, стиль оформления концов линий и стиль оформления углов. setPen()
Кисть - это шаблон, которым заполняются геометрические фигуры. Кисти характеризуются цветом и стилем. setBrush()
Шрифт используется для рисования текста. Шрифт может иметь огромное количество атрибутов, среди них: название и размер. setFont()
Слайд 3

Методы класса QPainter, для рисования геометрических фигур

Методы класса QPainter, для рисования геометрических фигур

Слайд 4

Стили пера.

Стили пера.

Слайд 5

Стили оформления концов линий и углов.

Стили оформления концов линий и углов.

Слайд 6

Стили кисти.

Стили кисти.

Слайд 7

Слайд 8

Слайд 9

Слайд 10

Параметры системы координат область просмотра (viewport) - это произвольный прямоугольник, заданный

Параметры системы координат

область просмотра (viewport) - это произвольный прямоугольник, заданный физическими

координатами.
окно (window) - описывает тот же самый прямоугольник, но уже в логических координатах.
матрица преобразования (world matrix) задает набор трансформаций, которые должны быть выполнены в дополнение к преобразованиям логических координат в физические.
Слайд 11

По-умолчанию координаты области просмотра и окна совпадают с системой координат физического

По-умолчанию координаты области просмотра и окна совпадают с системой координат физического

устройства. Например, если устройство отображения представляет из себя виджет, с размерами 320 X 200, то и область просмотра и окно имеют те же самые размеры. В данном случае логическая и физическая системы координат совпадают.
Слайд 12

матрица преобразования позволяет выполнять изменение масштаба, вращение и сдвиг рисуемых элементов.

матрица преобразования позволяет выполнять изменение масштаба, вращение и сдвиг рисуемых элементов.

Например, если необходимо нарисовать текст под углом 45 градусов, то можно написать следующий код:

При необходимости, матрицу преобразований можно сохранить вызовом saveWorldMatrix() и затем восстановить вызовом restoreWorldMatrix().

Слайд 13

Реализация Таймера электропечи: http://www.opennet.ru/docs/RUS/qt3_prog/c4100.html

Реализация Таймера электропечи:
http://www.opennet.ru/docs/RUS/qt3_prog/c4100.html

Слайд 14

2D графика. QCanvas QCanvas (Canvas -- холст, полотно, канва. прим. перев.)

2D графика. QCanvas

QCanvas (Canvas -- холст, полотно, канва. прим. перев.) предоставляет

более высокоуровневый интерфейс, чем QPainter. Он может включать в себя элементы любой формы и имеет внутреннюю реализацию двойной буферизации (когда изменяется какой либо элемент, то перерисовывается только та часть, которая действительно изменилась).
Слайд 15

Элементы, которые может отображать QCanvas, являются экземплярами класса QCanvasItem или его

Элементы, которые может отображать QCanvas, являются экземплярами класса QCanvasItem или его

потомков.
Qt содержит неплохой набор предопределенных графических элементов: QCanvasLine, QCanvasRectangle, QCanvasPolygon, QCanvasPolygonalItem, QCanvasEllipse, QCanvasSpline, QCanvasSprite и QCanvasText..
Слайд 16

Классы QCanvas и QCanvasItem - просто данные, они не имеют визуального

Классы QCanvas и QCanvasItem - просто данные, они не имеют визуального

представления.
Для отображения QCanvas и его элементов мы должны использовать виджет QCanvasView. Такое разделение данных и средств их отображения, позволяет отображать один и тот же QCanvas в нескольких QCanvasView, причем каждый из них может визуализировать свою собственную часть QCanvas, причем с применением различных матриц преобразования. http://www.opennet.ru/docs/RUS/qt3_prog/x4318.html
Слайд 17

Графика OpenGL OpenGL - это стандарт API, для отображения двух- и

Графика OpenGL

OpenGL - это стандарт API, для отображения двух- и трехмерной

графики. Приложения Qt могут использовать OpenGL, посредством модуля QGL.
Слайд 18

QMainWindow — класс для вывода простого окна, а т.к. мы будем

QMainWindow — класс для вывода простого окна, а т.к. мы будем

работать с opengl, нам понадобится QGLWidget — это класс для вывода графики, реализующий функции библиотеки OpenGL.
Слайд 19

QGLWidget при первой инициализации класса вызывает методы в следующем порядке: При

QGLWidget при первой инициализации класса вызывает методы в следующем порядке:
При запуске:

initializeGL()->resizeGL()->paintGL()
При изменении размера окна: resizeGL()->paintGL()
updateGL() вызывает paintGL()
initializeGL — необходимо использовать для глобальных настроек построения изображения, которые нет необходимости указывать при построении кадра.
resizeGL — служит для построения размера окна. Если в ходе работы изменится размер окна, но не изменить область просмотра, то при увеличении размера можно наблюдать непредсказуемые явления.
paintGL — этот метод будет выстраивать каждый кадр для отображения.
Слайд 20

Двойная буферизация PaintGL не рисует сразу картинку на экран, а заносит

Двойная буферизация

PaintGL не рисует сразу картинку на экран, а заносит в

буфер, а по запросу swapBuffers() заменяет текущее изображение на то, что появилось в буфере.
Буфериция позволяет более корректно заменять изображение, чтоб не происходили скачки на экране.
Слайд 21

События клика мыши mousePressEvent() — метод автоматически вызывается при нажатии клавиш

События клика мыши

mousePressEvent() — метод автоматически вызывается при нажатии клавиш мыши.

В передаваемых параметрах можно получить различную информацию, например, какой именно кнопкой было сделано нажатие и по какой точке по координатам.
-Данное событие в нашем примере используется для определения куда кликнули мышью, затем если наши координаты находятся в поле квадрата, то добавляем к нашим очкам + 1 и перестраиваем наш кадр.
-Так же используем для определения начальных координат для выделения области на экране, при зажатии и перемещении указателя.
Слайд 22

Событие перемещения указателя мыши mouseMoveEvent() — автоматически вызывается при изменении координат

Событие перемещения указателя мыши

mouseMoveEvent() — автоматически вызывается при изменении координат указателя

мыши. По умолчанию установлено setMouseTracking(false), поэтому событие вызывается только при условии нажатия клавиш мыши, для того, чтоб метод вызывался даже без нажатия необходимо установить setMouseTracking(true).
— Данный метод мы используем для получения текущего положения указателя
Слайд 23

Событие «отжатия» клавиши мыши mouseReleaseEvent() — автоматически вызывается при условии «отжатия»

Событие «отжатия» клавиши мыши

mouseReleaseEvent() — автоматически вызывается при условии «отжатия» кнопки

мыши. Так же принимает различные параметры.
— В данном случае мы используем метод, чтоб стереть с экрана выделенную нами область.
Слайд 24

Событие нажатия клавиш на клавиатуре keyPressEvent() — метод вызывается при событии,

Событие нажатия клавиш на клавиатуре

keyPressEvent() — метод вызывается при событии, когда

нажимается кнопка на клавиатуре.
— В нашем примере, мы используем этот метод, для того, чтоб переопределить координаты нашего квадрата и переместить его в новое место.
Слайд 25

Таймер QTimer — позволяет создать поток, который будет слушать сигналы и

Таймер

QTimer — позволяет создать поток, который будет слушать сигналы и запускать

соответственные слоты.
— В данном случае мы создаем таймер, который будет ждать 750мс, после чего он останавливается, отправляя сигнал timeout() , но мы при окончании сигнала будем не останавливать работу, а снова запустим слот на переопределение координат квадрата, по которому нужно кликать для того, чтоб набрать очки.