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 line;

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

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

    for (int i = 0;ilabel->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);
}

三、效果

QT 实现Label上画线_第1张图片

 

你可能感兴趣的:(QT,qt)