当前位置:主页 > c/c++教程 > QT QLabel显示图片并且利用鼠标点击画线

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

发布:2023-03-13 20:00:01 59


给网友们整理相关的编程文章,网友景宏远根据主题投稿了本篇教程内容,涉及到QT、QLabel显示图片、QLabel显示图片、鼠标点击画线、QT QLabel显示图片并且利用鼠标点击画线相关内容,已被333网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

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

在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 
#include 
#include 
#include 
#include 
#include 
 
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 
#include
 
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();
}

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


参考资料

相关文章

  • PyQt5+PyQt5Designer的安装步骤

    发布:2023-03-02

    本文主要介绍了PyQt5+PyQt5Designer的安装步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • PyQt5帮助文档查找每个类的方法

    发布:2020-01-07

    今天小编就为大家分享一篇浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • 实例分享pyqt多窗口之间的相互调用方法

    发布:2020-03-01

    今天小编就为大家分享一篇pyqt 多窗口之间的相互调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • 如何使用Spring integration在Springboot中集成Mqtt详解

    发布:2023-03-25

    MQTT是多个客户端通过一个中央服务器传递信息的多对多协议,能高效地将信息分发给一个或多个订阅者,下面这篇文章主要给大家介绍了关于如何使用Spring integration在Springboot中集成Mqtt的相关资料,需要的朋友可以参考下


  • Qt写入Json文件的方法详解(含源码+注释)

    发布:2023-03-05

    在Qt库中,为JSON的相关操作提供了完整的类支持,下面这篇文章主要给大家介绍了关于Qt写入Json文件(含源码+注释)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


  • Qt实现编辑框失去焦点隐藏功能

    发布:2023-03-05

    这篇文章主要为大家详细介绍了Qt实现的一个简单的编辑框操作——主窗口失去焦点隐藏功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下


  • Qt读写XML文件的方法详解(含源码+注释)

    发布:2023-03-06

    XML文件可以用来存储项目中的数据,它相当于一个简单的数据库,下面这篇文章主要给大家介绍了关于Qt读写XML文件(含源码+注释)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


  • Python语音合成的项目实战(PyQt5+pyttsx3)

    发布:2023-04-16

    本文主要介绍了Python语音合成的项目实战(PyQt5+pyttsx3),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


网友讨论