16,240
社区成员
发帖
与我相关
我的任务
分享
void ColorPen::mousePressEvent(QMouseEvent *event)
{
startPoint = event->pos() - imageStartPoint;
tempImage = *image;
path.moveTo(startPoint/scaleFactor);
}
//任意画时也是画在临时图片上,而释放时才画在图片上
void ColorPen::mouseMoveEvent(QMouseEvent *event)
{
*isShowImage = false;
tempImage = *image;//每次画都是在原来图片的基础上把path画一遍
stopPoint = event->pos() - imageStartPoint;
path.lineTo(stopPoint/scaleFactor);
paint();
image->setIsModified(true);
}
void ColorPen::mouseReleaseEvent(QMouseEvent *event)
{
*isShowImage = true;
//铅笔的内容在临时图片上
//父类对象赋给子类对象的指针指向
*(QImage*)image = tempImage;
initData();
}
void ColorPen::paint()
{
QPainter painter;
if(*isShowImage)
{
painter.begin(image);
}
else
{
painter.begin(&tempImage);
}
painter.setRenderHint(QPainter::Antialiasing,true);
QColor color = pen.color();
color.setAlpha(100);
pen.setColor(color);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
pen.setWidth(20);
painter.setPen(pen);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawPath(path);
painter.end();
QWidget* parent = qobject_cast<QWidget *>(this->parent());
parent->update();
startPoint = stopPoint;
}
void ColorPen::initData()
{
startPoint = QPoint(0,0);
stopPoint = startPoint;
path = QPainterPath();
}