Qt矩形绘制
开发工具与关键技术:QtCreator、C++
作者:何任贤
撰写时间:2019年04月25日
我这个矩形绘制是类绘图软件的矩形绘制,我写了一个简单的例子,达到绘图软件的绘制矩形的效果。
首先要做的是重写四个方法。
void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *e)override;
void mouseMoveEvent(QMouseEvent *e)override;
void resizeEvent(QResizeEvent *e)override;
绘制事件重写:必须重写的
void HuiZhi::paintEvent(QPaintEvent *e)//
{
QPainter p;
p.begin(this);
p.drawPixmap(0,0,*pix);
p.end();
}
鼠标按下事件重写:获取鼠标按下位置,即获取绘制矩形的起始位置
void HuiZhi::mousePressEvent(QMouseEvent *e)//鼠标按下事件
{
stopPos = startPos = e->pos();//获取鼠标当前位置
e->accept();
}
窗口大小改变事件:这个可以重写也可以不重写
void HuiZhi::resizeEvent(QResizeEvent *e)
{
if(pix->width() < e->size().width() || pix->height() < e->size().height())
{
QPixmap *newPix = new QPixmap(e->size());
newPix->fill(Qt::white);
QPainter p(newPix);
p.drawPixmap(0,0,*pix);
delete pix;
pix = newPix;
}
QWidget::resizeEvent(e);
}
重写resizeEvent使绘图区域随着窗口大小变化。
不重写的话如下图:
鼠标移动事件重写:这个是核心,是绘制矩形的操作。
void HuiZhi::mouseMoveEvent(QMouseEvent *e)//鼠标移动事件
{
QPainter p;
QPen pen;
QPen xianpi;
xianpi.setStyle(Qt::PenStyle(1));//画笔风格
xianpi.setWidth(0);//画笔宽度
xianpi.setColor(Qt::white);//画笔颜色
pen.setStyle(Qt::PenStyle(1));
pen.setWidth(0);
pen.setColor(Qt::black);
p.begin(pix);
p.setPen(xianpi);
//清除上次绘制
p.drawRect(startPos.x(),startPos.y(),(stopPos.x()-startPos.x()),(stopPos.y()-startPos.y()));
p.setPen(pen);
//更新鼠标位置
stopPos = e->pos();
//绘制矩形
p.drawRect(startPos.x(),startPos.y(),(stopPos.x()-startPos.x()),(stopPos.y()-startPos.y()));
p.end();
//更新
update();
}
这就能达到绘图软件绘制矩形的效果。
注释那的清除上次绘制并不是把前一个绘制的矩形清除,而是因为为了达到绘图软件绘制矩形的那种效果,需要如果不清除的话,如下图