重写QLabel实现图片显示框选截取保存

article/2025/10/14 5:05:30

在这里插入图片描述
之前写过用重写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


http://chatgpt.dhexx.cn/article/GOGjINKW.shtml

相关文章

QLabel 标签

QLabel 标签 QLabel 是 PyQt6 里用来建立文字或图片的标签控件&#xff0c;这篇教学会介绍如何在 PyQt6 窗口里加入 QLabel 标签&#xff0c;并进行像是文字字型、大小、颜色和位置...等参数设定。 快速预览&#xff1a; 加入 QLabel 标签 QLabel 位置设定 QLabel 文字设定 …

QLabel的使用

QLabel介绍 QLabel 是 Qt 框架中的一个控件类&#xff0c;用于显示文本或图像。它可以在窗口或其他容器中显示静态文本&#xff0c;并且可以根据需要设置格式、对齐方式和尺寸。 主要作用如下&#xff1a; 显示文本内容&#xff1a;QLabel 可以显示文字内容&#xff0c;可以…

QLabel显示图像

QLabel显示图像 通常用QLabel显示图像&#xff0c;QLabel类有setPixmap()函数&#xff0c;可以用来显示图像。也可以直接用QPainter画出图像。 如果图像过大&#xff0c;直接用QLabel显示&#xff0c;将会出现有部分图像显示不出来&#xff0c;这时可以用Scroll Area部件。方…

QLabel绘制滚动文本

实现思路 绘制滚动文本是个很简单的事&#xff0c;只需要用定时器累计一个文本坐标偏移量&#xff0c;然后 update &#xff0c;在 paintEvent 里把文本画出来。 Qt 定时刷新可以用&#xff08;可能还有其他方式&#xff09;&#xff1a; QObject的startTimer配合paintEvent&…

PyQt5 QLabel控件

PyQt5 QLabel控件 QLabel常用方法显示动画超链接 QLabel常用信号 QLabel 就是常见的标签&#xff0c;可以用来显示文字&#xff08;包括纯文本和富文本)&#xff0c;图片及动画。 QLabel常用方法 方法描述margin保存 QLabel 控件中内容与边框之间的距离&#xff08;边距&#…

Qt QLabel详解

一、QLabel常用方法 1. QLabel设置文本内容 ui.label->setText(QStringLiteral("测试中文\n"));2. QLabel设置颜色 通过设计器里面的改变样式进行设置&#xff1a;同时可以设置字体、文本对齐方式、背景图片 color: rgb(255, 85, 0); background-color: rgb(8…

Qt之QLabel(属性 显示图片 显示动图 显示富文本信息 信号)

QLabel可以说是Qt中最常见的控件之一&#xff0c;主要用来显示文本文字、显示图片、显示gif动图、显示富文本信息。本文将从以下几个方面对QLabel进行介绍: [1]显示及获取文本文字 [2]显示图片 [3]显示动图 [4]显示富文本信息 [5]常用属性设置 [6]信号事件 至于样式表(Q…

Qt扫盲-QLabel使用总结

QLabel使用总结 一、QLabel 显示内容二、注意事项1. 格式注意2. 不保留先前状态3. 格式对齐4. 伙伴焦点 三、信号和槽函数使用1. 信号2. 槽函数 总结&#xff1a; QLabel 其实就是一个用来只读显示的简易控件。适合数据量很小的内容显示。 QLabel用于显示 文本或图像。 不提供…

QT常用控件——QLabel标签控件

操作系统: 统信UOSv20 Qt版本: 5.11.3 一&#xff0c;简单介绍 QLabel用于显示文本或图像&#xff0c;不提供用户交互功能&#xff0c;标签的视觉外观可以以各种方式配置。 项目内容HeaderQLabelqmakeQT widgetsInheritsQFrame 二&#xff0c;常用方法 1. 常用方法 方法…

JavaScript 弹出对话框3种方式

js 弹出对话框3种方式对话框有三种 1&#xff1a;只是提醒&#xff0c;不能对脚本产生任何改变&#xff1b; 2&#xff1a;一般用于确认&#xff0c;返回 true 或者 false &#xff0c;所以可以轻松用于 if...else...判断 3&#xff1a;一个带输入的对话框&#xff0c;可以返回…

js的弹出框

js的弹出框包括三种&#xff1a;alert、confirm、prompt 1 alert() alert()方法有一个参数&#xff0c;就是用户想弹出的内容&#xff0c;弹出框很简单&#xff0c;就一个显示功能&#xff0c;你可以点击确认关闭这个弹出框。 例如&#xff1a; alert("hello world&…

JavaScript弹出对话框的三种方法

三种方法 alert(); 最简单&#xff0c;将alert();括号内的内容弹出。 confirm(); 与alert();类似&#xff0c;包含确认和取消按钮&#xff0c;点击确定confirm();方法会返回true&#xff0c;点击取消confirm();方法会返回false&#xff1b; prompt(); 与confirm();方法…

JavaScript弹出框

提到弹出框&#xff0c;首先想到的alert()了&#xff0c;其次想到的也还是alert&#xff08;&#xff09;&#xff0c;其实在js中有三种弹出框&#xff0c;下面我们一一说明。 1&#xff0c;仅确定。 即&#xff1a;对话框界面上只有确定按钮。该功能可以使用alert&#xff08;…

JS弹出对话框的三种方式

javascript的三种对话框是通过调用window对象的三个方法alert()&#xff0c;confirm()和prompt()来获得&#xff0c;可以利用这些对话框来完成js的输入和输出&#xff0c;实现与用户能进行交互的js代码。 第一种&#xff1a;alert()方法 alert()方法是这三种对话框中最容易使用…

JavaScript弹出对话框的三种方式-alert()-confirm()-prompt()

一、alert()警告框&#xff08;确定&#xff09; alert()方法是显示一条弹出提示消息和确认按钮的警告框。 需要注意的是 &#xff1a; alert()是一个阻塞的函数&#xff0c;如果不点确认按钮&#xff0c;后面的内容就不会加载出来。 使用方式&#xff1a; alert(“想要提示的文…

ssh 公钥登录

公钥登录远程主机 ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上。 ssh-copy-id命令也会给远程主机的用户主目录&#xff08;home&#xff09;和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。 ssh-copy-id [-i [identity_file]] [user]m…

SSH登录失败提示Key exchange failed

前两天去配置一台华为5735交换机&#xff0c;到现场才被告知网络中不允许接入私人电脑&#xff0c;要用他们的涉密电脑配置&#xff0c;结果配置完成后测试SSH远程登录失败&#xff0c;提示如下图&#xff1a; 多次检查配置没有发现有什么遗漏&#xff0c;后来询问别人告知是本…

统信UOS配置SSH登录

配置ssh登录 vim /etc/ssh/sshd_config #打开ssh配置文件 Port 22 #开启ssh 22端口 PermitRootLogin yes #允许root登录 systemctl restart sshd #重启sshd服务 使用MobaXterm1_CHS1远程工具测试 登录成功

Oracle云服务器启用SSH登录

Oracle云服务器&#xff08;虚机实例&#xff09;创建创建完成后&#xff0c;打开FinalShell&#xff08;可以使用其他Shell登录工具&#xff09;配置好相应的信息。 在此注意以下两点&#xff1a; 用户名是&#xff1a;Centos系统默认账户是opc&#xff1b;Ubuntu系统默认账户…

通过SSH登录Linux云服务器方法

目录 什么是SSH ? SSH登录云服务器 VScode配置ssh环境 VSCode配置Linux平台C/C编程环境 什么是SSH ? Secure Shell&#xff08;安全外壳协议&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。SSH通…