Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Программирование графики в Qt. Рисование мышью в окне. QPainter. Обработка событий

Доброго здоровья, и это мой канал Old Programmer о программировании и программистах. Здесь: Тематическое оглавление моего Zen-канала (Old Programmer) . Вот здесь все мои материалы о QT. Ну, а тут материалы по языкам C/C++. Обзор материалов по компьютерной графике здесь . Сегодня делаем простейший векторный графический редактор. Используем C++ и библиотеку QT5. Упор сделан на обработку событий от мыши. Простейший графический редактор Перечислю функциональность графического редактора. Конечно "графический редактор" это громко сказано, но, я думаю, по указанной схеме можно наращивать функциональность. И так: Как видим, функциональность не богата, но она присуща любому графическому редактору. Описание программы на C++ Qt Программа простейшего графического редактора представлена в qtg4000.cpp. Разберем программу подробнее, хотя она и прокомментирована. Подписывайтесь на мой канал programmer's notes и не забывайте ставить 'like'.

Доброго здоровья, и это мой канал Old Programmer о программировании и программистах. Здесь: Тематическое оглавление моего Zen-канала (Old Programmer) . Вот здесь все мои материалы о QT. Ну, а тут материалы по языкам C/C++. Обзор материалов по компьютерной графике здесь .

  • Программирование на языке Python. Графическая библиотека pillow
  • Программирование графики на PyQT5 (QtGui). Пример приложения
  • Программирование графики на PyQT5 (класс QPixmap). Отображение картинки в окне
  • Компьютерная графика. Рисование в QT (объект QPainter). Графики функций на C++
  • Список разделов канала Old Programmer, канала о программировании и программистах

Сегодня делаем простейший векторный графический редактор. Используем C++ и библиотеку QT5. Упор сделан на обработку событий от мыши.

Простейший графический редактор

Перечислю функциональность графического редактора. Конечно "графический редактор" это громко сказано, но, я думаю, по указанной схеме можно наращивать функциональность. И так:

  • В окне приложения можно рисовать курсором мыши при нажатой левой кнопке мыши.
  • При отпускании левой кнопки рисование прекращается. При последующем нажатии рисование возобновляется с точки, где в данный момент находится курсор мыши.
  • При нажимании и отпускании правой кнопки мыши удаляется последний нарисованный элемент.
  • Рисунок сохраняется при сворачивании и разворачивании окна (перерисовка).

Как видим, функциональность не богата, но она присуща любому графическому редактору.

Описание программы на C++ Qt

Программа простейшего графического редактора представлена в qtg4000.cpp. Разберем программу подробнее, хотя она и прокомментирована.

  • Прежде всего обратим внимание на массив (вектор) vcp. Здесь хранится весь рисунок. Рисование происходит прямыми линиями от предыдущей координаты к текущей. Каждый элемент вектора состоит и координат и флага. Флаг определяет нужно ли вести линию от текущей координаты. Если происходит отпускание левой кнопки мыши, то для последней координаты флаг становится равным 1. Это означает, что при последующим нажатии и удерживании левой кнопки мыши линия от последней точки проводиться не будет.
  • При щелчке правой кнопки мыши удаляется последний элемент массива vcp и инициализируется обновление окна. Также обновление окна инициализируется при добавлении элемента к массиву.
  • Также отметим, что для левой кнопки мыши отслеживается и нажатие и отпускание, тогда как для правой кнопки достаточно обработать только отпускание.
  • Еще один момент. По умолчанию движение мыши не отслеживается (mouseMoveEvent). Чтобы событие отрабатывалось, необходимо выполнить метод setMouseTracking().

Подписывайтесь на мой канал programmer's notes и не забывайте ставить 'like'.