之前写过用重写QGraphicsItem的方式来实现图片显示,框选,保存的代码,这次通过重写QLabel的方式来实现。
主要重写QLabel的代码如下:
mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H#include <QObject>
#include <QWidget>
#include <QLabel>
#include <QMouseEvent>
#include <QPainter>class myLabel:public QLabel
{Q_OBJECT
public:myLabel(QWidget *parent);~myLabel();QPixmap m_loadPixmap;QPixmap m_capturePixmap;void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:bool m_isDown;QPoint m_start;QPoint m_stop;QRect getRect(const QPoint &beginPoint, const QPoint &endPoint);Q_SIGNALS:void getPictureSig(QPixmap catureImage);
};#endif // MYLABEL_H

mylabel.cpp

#include "mylabel.h"myLabel::myLabel(QWidget *parent):QLabel(parent),m_start(QPoint(-1,-1)),m_stop(QPoint(-1,-1))
{}myLabel::~myLabel()
{}void myLabel::mousePressEvent(QMouseEvent *e)
{if(e->button() && Qt::LeftButton){m_isDown = true;m_start = e->pos();m_stop = e->pos();}
}void myLabel::mouseMoveEvent(QMouseEvent *e)
{if(m_isDown){m_stop = e->pos();}update();
}void myLabel::mouseReleaseEvent(QMouseEvent *e)
{if(e->button() && Qt::LeftButton){m_isDown = false;QRect selectedRect = getRect(m_start, m_stop);m_capturePixmap = m_loadPixmap.copy(selectedRect);emit getPictureSig(m_capturePixmap);//将框选的图片传给主界面}
}void myLabel::paintEvent(QPaintEvent * event )
{QLabel::paintEvent(event);QPainter painter(this);painter.setPen(QPen(Qt::green,2));if(!m_isDown){return;}painter.drawRect(QRect(m_start,m_stop));
}QRect myLabel::getRect(const QPoint &beginPoint, const QPoint &endPoint)
{int x, y, width, height;width = qAbs(beginPoint.x() - endPoint.x());height = qAbs(beginPoint.y() - endPoint.y());x = beginPoint.x() < endPoint.x() ? beginPoint.x() : endPoint.x();y = beginPoint.y() < endPoint.y() ? beginPoint.y() : endPoint.y();QRect selectedRect = QRect(x, y, width, height);// 避免宽或高为零时拷贝截图有误;if (selectedRect.width() == 0){selectedRect.setWidth(1);}if (selectedRect.height() == 0){selectedRect.setHeight(1);}return selectedRect;
}

源码连接:https://download.csdn.net/download/weixin_43935474/12511374

重写QLabel实现图片显示框选截取保存相关推荐

  1. php图片显示框,【转】php让图片弹出下载框的方法

    在做图片下载站时,常常需要给用户下载图片,但图片浏览器是直接可以打开的.怎么办呢,有没有什么方法可以让图片类型的文件弹出下载框下载呢, phperz.com 当然是有的,php的header函数就可以 ...

  2. 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式

    VTK框选拾取三角面片 最近需要实现拾取三角面片的交互功能,看了官方示例和网友分享,都是使用vtkInteractorStyleRubberBandPick搭配vtkAreaPicker.但是具体实现 ...

  3. c#+AE-属性查询之框选查询

    属性查询是ArcGIS Engine二次开发中经常用到的基础功能,这里就以框选查询为例,介绍一下矢量图层的属性查询. 整个过程分为两部分,一是获取框选的要素,而是显示框选要素的属性值. 得到框选要素的 ...

  4. 【VTK】VTK框选表面拾取面片——仅选中前表面

    VTK框选表面拾取面片--仅选中前表面 接上一篇 VTK框选表面拾取三角面片--通过观察者命令模式 上一篇最后遗留一个问题,框选表面后,会把模型背面的面片也一起选中.所以这篇内容是解决该问题的. 效果 ...

  5. axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法

    在前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: 请上传图片 js代码: //实时显示该图片在页面 g ...

  6. 在reader中勾选pdf复选框_如何让文件夹内PDF图片显示图标

    原标题:如何让文件夹内PDF图片显示图标 电脑小知识,值得收藏 有些网友Win 7系统的64位版本安装了Adobe Reader软件之后,发现PDF文件在系统中无法显示缩略图,这样看起来不是很方便,每 ...

  7. canvas实现矩形框,用来进行图片框选

    canvas实现图片框选-js版 由于项目中需要进行图片部分区域框选,用来做图片标注工作,之前也找过多种方案,比如徒手用div来实现,后来绕了一圈之后,还是发现canvas非常便捷,于是乎将项目中的核 ...

  8. 基于华为云自定义模板的图片操作演示(框选、拖拽)

    掘金链接 华为云自定义模板识别是服务于AI领域的流程控制系统,我们一起了解下其中一个模块的界面化操作实例.如下图,针对图片的高精度识别,我们需要处理图片的样式以便获得更好的模型训练数据和高精度识别结果 ...

  9. QTableView 表格中插入图片、勾选框、下拉框

    QTableView 表格中插入图片.勾选框.下拉框 效果图 QT的Delegate,可以实现TableView中每一个单元格的显示形式.本例利用Delegate的paint函数绘制出图片.勾选框.下 ...

  10. 关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值...

    最近做项目用到了treeview.因为涉及到多选的问题,很是棘手,于是乎,我决定查看原生JS,探个究竟.需要引用官方的bootstrap-treeview.js都知道吧,对于所需要引用的,我就不多说了 ...

最新文章

  1. android屏幕底部黑块,Android surfaceView 黑块问题
  2. 【Java学习】多线程2
  3. 深度学习基础(十二)—— ReLU vs PReLU
  4. 无人机图像处理工具-亮度、对比度、饱和度调整/匀光匀色/图像去雾
  5. php编写服务器端脚本程序,PHP脚本语言写的简单服务器程序
  6. POJ 1228 —— “稳定”凸包
  7. JAVA基础学习之路(十一)引用传递
  8. 手机上有没有学python的软件-哪个手机软件有python题库
  9. vector容器——容量和大小
  10. VM14无法将网络更改为桥接状态:没有未桥接的主机网络适配器
  11. 信息学奥赛一本通 铲雪车
  12. laravel + xampp 除了根目录其他路由都是404的解决方法
  13. jpeg编码学习笔记
  14. 影评系统的机遇和挑战
  15. Proteus 抢答器设计经验 边沿触发的单稳态触发器实现 74LS148的一些BUG 74LS05反相器
  16. HDU 6187 Destroy Walls
  17. 基于Java毕业设计业余足球队服务平台源码+系统+mysql+lw文档+部署软件
  18. CC2530关于flash的地址的问题讲解
  19. 【技术新趋势】合合信息:复杂环境下ocr与印章识别技术理解及研发趋势
  20. FLUTTER学习笔记--布局

热门文章

  1. 60款顶级大数据开源工具
  2. Xposed+JustTrustMe解决SSL证书问题
  3. 体检预约系统软件测试计划书,体检中心-管理软件需求分析.doc
  4. hbase版本与Hadoop版本支持关系(官方)
  5. 网络编程基础及代码实现
  6. java正则判断11位手机号码_java-正则表达式判断手机号
  7. 华为ensp 多区域OSPF配置
  8. Python爬虫用到的一些浏览器代理标识
  9. Agilent/安捷伦N6705B直流电源分析仪
  10. Apache DBUtils