QT中在QLabel显示图片并且利用鼠标点击画线问题

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

QT中在QLabel显示图片并且利用鼠标点击画线问题

BITLBB   2022-11-12 我要评论

在QLabel显示图片并且利用鼠标点击画线

最近在做在Label上显示图片并且通过鼠标点击画线,在网上查了很多零零散散的东西,收获也多

很多初学者更希望直接贴代码,这样可以模仿来写,我下面直接贴出我的项目中自己写的maLabel类

(如果只是实现利用鼠标绘制, 重写void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e);即可,其他函数是我项目需求所以多写的,可以忽略)

申明myLabel类,继承QLabel,生成myLabel.h和myLabel.cpp文件

以下为我的代码,供参考

我只是实现了画一条直线,如果要画多条,可以用vector将之前若干条的信息干存下来,每次都绘制

myLabel.h 

#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
#include <QPoint>
#include <QColor>
#include <QPaintEvent>
#include <QImage>
#include <QPixmap>
 
class myLabel : public QLabel
{
    //Q_OBJECT
public:
    myLabel();
    //~myLabel();
    //绘制线条
    virtual void paintEvent(QPaintEvent *event) override;
    //鼠标按下
    void mousePressEvent(QMouseEvent *e);
    //鼠标移动
    void mouseMoveEvent(QMouseEvent *e);
    //鼠标抬起
    void mouseReleaseEvent(QMouseEvent *e);
 
    //设置所画线条属性
    void setLineColor(const QColor lineColor);
    void setLineSize(const int lineSize);
    //得到画线的起点和终点
    QPoint getStartPoint();
    QPoint getEndPoint();
 
    void clear();
 
private:
    QPoint lineStartPoint;          //画线起点
    QPoint lineEndPoint;            //画线终点
    QColor lineColor;               //线条颜色
    int lineSize;                  //5种线型
    bool isPressed;
};
 
#endif // MYLABEL_H

myLabel.cpp

#include "myLabel.h"
#include <QPen>
#include<QPainter>
 
myLabel::myLabel()
{
    this->lineStartPoint = QPoint(0,0);
    this->lineEndPoint = QPoint(0,0);
    this->lineColor = QColor(Qt::black);
    this->lineSize = 3;
}
 
//绘制线条
void myLabel::paintEvent(QPaintEvent *event)
{
    QLabel::paintEvent(event);//必须有,才能让背景图片显示出来
    QPainter painter(this);
    QPen pen;
    pen.setColor(lineColor);
    pen.setWidth(lineSize);
    painter.setPen(pen);
    painter.drawLine(lineStartPoint,lineEndPoint);
}
 
//鼠标按下
void myLabel::mousePressEvent(QMouseEvent *e)
{
    lineStartPoint = e->pos();
    lineEndPoint = e->pos();
    //在图片上绘制
    isPressed = true;
}
 
//鼠标移动
void myLabel::mouseMoveEvent(QMouseEvent *e)
{
    if(isPressed)
    {
        lineEndPoint=e->pos();
        update();
    }
}
 
//鼠标抬起
void myLabel::mouseReleaseEvent(QMouseEvent *e)
{
    isPressed=false;
    update();
}
 
void myLabel::setLineColor(const QColor lineColor)
{
    this->lineColor = lineColor;
}
 
void myLabel::setLineSize(const int lineSize)
{
    this->lineSize = lineSize;
}
 
QPoint myLabel::getStartPoint()
{
    return lineStartPoint;
}
 
QPoint myLabel::getEndPoint()
{
    return lineEndPoint;
}
 
void myLabel::clear()
{
    lineStartPoint = QPoint(0,0);
    lineEndPoint = QPoint(0,0);
    update();
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们