Доброго здоровья читателям моего канала programmer's notes. Поддерживаем мой канал.
Использование QImage для рисования, графический редактор
Продолжаем статьи о графических редакторах. Предыдущая была здесь
Сегодня используем объект QImage для рисования по полной программе. Кроме этого реализуем сохранение и загрузку картинок. В данной программе (окно программы см. на рисунке 2) мы отказываемся от векторного подхода и в ней не реализован процесс отката, но зато есть возможность не только сохранять картинку (ctrl+s), но и её загружать (cntrl+l).
Скриншот программы представлен на рисунке 1.
Пояснения к программе
- При создании окна QWidget мы также создаём объект QImage (self.image), устанавливая его размер такой же как у окна. Цвет фона выбираем белый (Qt.white).
- Метод mouseMoveEvent() в данном случае используется для отслеживания движения мыши и рисования, если self.f = 1. Для рисования используем объект QPainder, используя метод drawLine() - прямая между двумя точками на объекте QImage. Обращаю внимание, что при создании объекта QPainter мы привязываем его сразу к объекту QImage. Линия проводится между двумя точками self.lp (предыдущая) и e.pos() (текущая).
- Метод mouseDoubleClickEvent() - обработка двойного щелчка, переход между состоянием рисования и состоянием, когда можно сохранять рисунок и его загружать.
- Метод paintEvent() вызывается для отображения того, что нарисовано на QImage в поле окна. Обратите внимание на self.update() в методе mouseMoveEvent(), тем самым как раз вызывается paintEvent(). Здесь тоже создаётся объект QPainter, с помощью метода drawImage(), которого содержимое объекта QImage оказывается в окне.
- Обработка в методе keyPressEvent() нам уже знакома. При ctrl+s вызывается self.sv() - сохранить рисунок, при ctrl+l - вызывается метод self.ld() - загрузить рисунок. После загрузки вызывается метод paintEvent() и рисунок появляется в окне.
Замечание
В данной статье мы отказались от представление рисунка в векторном формате, и здесь нет у нас отката в изображении. Зато мы мы по полной реализовали возможности QImage. В следующих статьях мы вернёмся к векторному подходу.
Пока всё!
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.