📄 paint.cpp
字号:
#include "paint.h"
#include <QtGui>
paint::paint(int w,int h,QString fichier,QColor coleur,QWidget *parent) : QWidget(parent)
{
setAttribute(Qt::WA_StaticContents);
// openImage("tmp.png");
setPenColor(coleur);
setFixedSize(w,h);
modified = false;
scribbling = false;
myPenWidth = 1;
}
bool paint::openImage(const QString &fileName)
{
QImage loadedImage;
if (!loadedImage.load(fileName))
return false;
QSize newSize = loadedImage.size().expandedTo(size());
resizeImage(&loadedImage, newSize);
image = loadedImage;
modified = false;
update();
return true;
}
bool paint::saveImage(const QString &fileName)
{
QImage visibleImage = image;
resizeImage(&visibleImage, size());
if (visibleImage.save(fileName)) {
modified = false;
return true;
} else {
return false;
}
}
void paint::setPenColor(const QColor &newColor)
{
myPenColor = newColor;
}
void paint::setPenWidth(int newWidth)
{
myPenWidth = newWidth;
}
void paint::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
lastPoint = event->pos();
scribbling = true;
}
}
void paint::mouseMoveEvent(QMouseEvent *event)
{
if ((event->buttons() & Qt::LeftButton) && scribbling)
drawLineTo(event->pos());
}
void paint::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && scribbling) {
drawLineTo(event->pos());
scribbling = false;
}
}
void paint::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
painter.drawImage(QPoint(0, 0), image);
}
void paint::resizeEvent(QResizeEvent *event)
{
if (width() > image.width() || height() > image.height())
{
int newWidth = image.width();
int newHeight = image.height();
resizeImage(&image, QSize(newWidth, newHeight));
update();
}
QWidget::resizeEvent(event);
}
void paint::drawLineTo(const QPoint &endPoint)
{
QPainter painter(&image);
painter.setPen(QPen(myPenColor, myPenWidth, Qt::SolidLine, Qt::RoundCap,Qt::RoundJoin));
painter.drawLine(lastPoint, endPoint);
modified = true;
int rad = (myPenWidth / 2) + 2;
update(QRect(lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad));
lastPoint = endPoint;
}
void paint::resizeImage(QImage *image, const QSize &newSize)
{
if (image->size() == newSize)
return;
QImage newImage(newSize, QImage::Format_RGB32);
// newImage.fill(qRgb(255, 0, 0));
QPainter painter(&newImage);
painter.drawImage(QPoint(0, 0), *image);
*image = newImage;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -