QT中在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


 
 
  1. #ifndef MYLABEL_H
  2. #define MYLABEL_H
  3. #include <QLabel>
  4. #include <QPoint>
  5. #include <QColor>
  6. #include <QPaintEvent>
  7. #include <QImage>
  8. #include <QPixmap>
  9. class myLabel : public QLabel
  10. {
  11. //Q_OBJECT
  12. public:
  13. myLabel();
  14. //~myLabel();
  15. //绘制线条
  16. virtual void paintEvent(QPaintEvent *event) override;
  17. //鼠标按下
  18. void mousePressEvent(QMouseEvent *e);
  19. //鼠标移动
  20. void mouseMoveEvent(QMouseEvent *e);
  21. //鼠标抬起
  22. void mouseReleaseEvent(QMouseEvent *e);
  23. //设置所画线条属性
  24. void setLineColor(const QColor lineColor);
  25. void setLineSize(const int lineSize);
  26. //得到画线的起点和终点
  27. QPoint getStartPoint();
  28. QPoint getEndPoint();
  29. void clear();
  30. private:
  31. QPoint lineStartPoint; //画线起点
  32. QPoint lineEndPoint; //画线终点
  33. QColor lineColor; //线条颜色
  34. int lineSize; //5种线型
  35. bool isPressed;
  36. };
  37. #endif // MYLABEL_H

myLabel.cpp


 
 
  1. #include "myLabel.h"
  2. #include <QPen>
  3. #include<QPainter>
  4. myLabel::myLabel()
  5. {
  6. this->lineStartPoint = QPoint( 0, 0);
  7. this->lineEndPoint = QPoint( 0, 0);
  8. this->lineColor = QColor(Qt::black);
  9. this->lineSize = 3;
  10. }
  11. //绘制线条
  12. void myLabel::paintEvent(QPaintEvent *event)
  13. {
  14. QLabel::paintEvent(event); //必须有,才能让背景图片显示出来
  15. QPainter painter(this);
  16. QPen pen;
  17. pen.setColor(lineColor);
  18. pen.setWidth(lineSize);
  19. painter.setPen(pen);
  20. painter.drawLine(lineStartPoint,lineEndPoint);
  21. }
  22. //鼠标按下
  23. void myLabel::mousePressEvent(QMouseEvent *e)
  24. {
  25. lineStartPoint = e->pos();
  26. lineEndPoint = e->pos();
  27. //在图片上绘制
  28. isPressed = true;
  29. }
  30. //鼠标移动
  31. void myLabel::mouseMoveEvent(QMouseEvent *e)
  32. {
  33. if(isPressed)
  34. {
  35. lineEndPoint=e->pos();
  36. update();
  37. }
  38. }
  39. //鼠标抬起
  40. void myLabel::mouseReleaseEvent(QMouseEvent *e)
  41. {
  42. isPressed= false;
  43. update();
  44. }
  45. void myLabel::setLineColor( const QColor lineColor)
  46. {
  47. this->lineColor = lineColor;
  48. }
  49. void myLabel::setLineSize( const int lineSize)
  50. {
  51. this->lineSize = lineSize;
  52. }
  53. QPoint myLabel::getStartPoint()
  54. {
  55. return lineStartPoint;
  56. }
  57. QPoint myLabel::getEndPoint()
  58. {
  59. return lineEndPoint;
  60. }
  61. void myLabel::clear()
  62. {
  63. lineStartPoint = QPoint( 0, 0);
  64. lineEndPoint = QPoint( 0, 0);
  65. update();
  66. }




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值