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

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho