16,203
社区成员
发帖
与我相关
我的任务
分享
void PaintArea::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.scale(scale,scale);
if(isDrawing)
painter.drawImage(0,0,tempImage);
if(penStyle==Qt::DotLine)
painter.drawImage(0,0,tempImage);
else
painter.drawImage(0,0,image);
}
void PaintArea::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
lastPoint=event->pos();
isDrawing=true;
}
}
void PaintArea::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons()&Qt::LeftButton)
{
endPoint=event->pos();
if(curShape==None)
{
isDrawing=false;
paint(image);
}
else
{
tempImage=image;
paint(tempImage);
}
}
}
void PaintArea::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
endPoint=event->pos();
isDrawing=false;
if(penStyle==Qt::DotLine)
{
tempImage=image;
paint(tempImage);
}
else
paint(image);
}
}
void PaintArea::paint(QImage&theImage)
{
QPainter pp(&theImage);
QPen pen=QPen();
pen.setColor(penColor);
pen.setStyle(penStyle);
pen.setWidth(penWidth);
if(penStyle!=Qt::DotLine)
brushColor=curBrushColor;
QBrush brush=QBrush(brushColor);
pp.setPen(pen);
pp.setBrush(brush);
int x,y,w,h;
x=lastPoint.x()/scale;
y=lastPoint.y()/scale;
w=endPoint.x()/scale-x;
h=endPoint.y()/scale-y;
switch(curShape)
{
case None:
{
pp.drawLine(lastPoint/scale,endPoint/scale);
lastPoint=endPoint;
break;
}
case Line:
{
pp.drawLine(lastPoint/scale,endPoint/scale);
break;
}
case Rectangle:
{
pp.drawRect(x,y,w,h);
break;
}
case Ellipse:
{
pp.drawEllipse(x,y,w,h);
}
}
update();
modified=true;
}
void PaintArea::setChooseCursor()
{
setCursor(QCursor(Qt::CrossCursor));
setPenStyle(Qt::DotLine);
curShape=Rectangle;
curBrushColor=brushColor;
brushColor=Qt::transparent;
}
void PaintArea::copy()
{
int x,y,w,h;
x=lastPoint.x()/scale;
y=lastPoint.y()/scale;
w=endPoint.x()/scale-x;
h=endPoint.y()/scale-y;
QImage copyImage=image.copy(x,y,w,h);
cb->setImage(copyImage);
}
void PaintArea::paste()
{
QImage pasteImage=cb->image();
QPainter painter(&pasteImage);
painter.drawImage(0,0,image);
}
void PaintArea::cut()
{
int x,y,w,h;
x=lastPoint.x()/scale;
y=lastPoint.y()/scale;
w=endPoint.x()/scale-x;
h=endPoint.y()/scale-y;
QImage copyImage=image.copy(x,y,w,h);
cb->setImage(copyImage);
QColor curColor =penColor;
penColor=Qt::white;
penStyle=Qt::SolidLine;
brushColor=Qt::white;
paint(image);
penStyle=Qt::DotLine;
penColor=curColor;
brushColor=curBrushColor;
}