QT 实现Label上画线

实现功能:Label上有一张图片,用画笔在图像上画线。

一、头文件添加以下函数和变量

     QMouseEvent * mouseEvent;
     void mousePressEvent(QMouseEvent* event);
     void mouseMoveEvent(QMouseEvent* event);
     void mouseReleaseEvent(QMouseEvent* event);
     void paintEvent(QPaintEvent *p);
     void posTrans(QPoint);//坐标转换

     QVector<QPoint> line;

二、源文件中实现以上函数

void Widget::paintEvent(QPaintEvent *event)//任何鼠标事件都会导致调用paintevent
{
    QPainter pen(&pix);//画笔设置在图像pix上,表示在图像中画线

    for (int i = 0;i<line.size()-1;i++)
    {
        pen.drawLine(line[i],line[i+1]);
    }

    ui->label->setPixmap(pix);


}

void Widget::mouseMoveEvent(QMouseEvent *event)//鼠标按下之后,移动事件才能触发
{
   posTrans(event->globalPos());//获取全局坐标
}

void Widget::mousePressEvent(QMouseEvent *event)
{

    posTrans(event->globalPos());
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{

    posTrans(event->globalPos());
    line.clear();//画完一条线之后清楚vector内容,便于下次装新的线

}


void Widget::posTrans(QPoint p)
{
     QPoint p0 = ui->label->mapFromGlobal(p);//图片填满label时可用
     //当图片未填满label时
     int xoffset = (ui->label->contentsRect().width()-ui->label->pixmap()->width())/2;
     int yoffset = (ui->label->contentsRect().height()-ui->label->pixmap()->height())/2;
     QPoint Pos0 = QPoint(p0.x()-xoffset,p0.y()-yoffset);
     line.push_back(Pos0);
}

三、效果

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值