Qt简单截屏

2024-04-26 08:58
文章标签 简单 qt 截屏

本文主要是介绍Qt简单截屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

鼠标左键按下拉取截取范围,中间确认截图,右键取消截图。

#ifndef GRABWIDGET_H
#define GRABWIDGET_H#include <QWidget>
#include <QMouseEvent>class GrabWidget : public QWidget
{Q_OBJECT
public:explicit GrabWidget(QWidget *parent = 0);signals:public slots:public:void savePixmap();protected:void mouseMoveEvent(QMouseEvent *ev);void paintEvent(QPaintEvent *);void mousePressEvent(QMouseEvent *ev);void mouseReleaseEvent(QMouseEvent *ev);private:QPoint ptCur_;QPoint ptStart_;QPoint ptEnd_;bool isDrawing_;
};#endif // GRABWIDGET_H
#include "grabwidget.h"
#include <QApplication>
#include <QtGui>
#include <QDesktopWidget>GrabWidget::GrabWidget(QWidget *parent) :QWidget(parent)
{setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);setWindowOpacity(0.1);resize(QApplication::desktop()->width(), QApplication::desktop()->height());setCursor(Qt::CrossCursor);isDrawing_ = false;
}void GrabWidget::savePixmap()
{}void GrabWidget::mouseMoveEvent(QMouseEvent *ev)
{ptCur_.setX(ev->x());ptCur_.setY(ev->y());update();
}void GrabWidget::paintEvent(QPaintEvent *e)
{QWidget::paintEvent(e);int width, height;QPainter painter(this);painter.setPen(Qt::red);if (isDrawing_) {width = ptCur_.x() - ptStart_.x();height = ptCur_.y() - ptStart_.y();painter.drawRect(ptStart_.x(), ptStart_.y(), width, height);} else {if (ptEnd_ != ptStart_) {width = ptEnd_.x() - ptStart_.x();height = ptEnd_.y() - ptStart_.y();painter.drawRect(ptStart_.x(), ptStart_.y(), width, height);}}
}void GrabWidget::mousePressEvent(QMouseEvent *ev)
{if (ev->button() == Qt::MiddleButton) {hide();int width = ptEnd_.x() - ptStart_.x();int height = ptEnd_.y() - ptStart_.y();QPixmap tmpPixmap = QPixmap::grabWindow(QApplication::desktop()->winId(),ptStart_.x(), ptStart_.y(), width, height);QDateTime dt = QDateTime::currentDateTime();QString filename = dt.toString("yyyyMMddhhmmss") + ".jpg";tmpPixmap.save(filename, 0, 100);exit(1);} else if (ev->button() == Qt::RightButton) {exit(1);} else if (ev->button() == Qt::LeftButton) {ptStart_ = ev->pos();isDrawing_ = true;}update();
}void GrabWidget::mouseReleaseEvent(QMouseEvent *ev)
{if (ev->button() == Qt::LeftButton) {ptEnd_ = ev->pos();isDrawing_ = false;}
}
#include <QApplication>
#include "grabwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);GrabWidget grabWidget;grabWidget.setMouseTracking(true);grabWidget.show();return a.exec();
}

这篇关于Qt简单截屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937147

相关文章

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC