Qt矩形绘制

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();
}
这就能达到绘图软件绘制矩形的效果。
注释那的清除上次绘制并不是把前一个绘制的矩形清除,而是因为为了达到绘图软件绘制矩形的那种效果,需要如果不清除的话,如下图
在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值