当前位置:网站首页>QT GrabWindow截取屏幕
QT GrabWindow截取屏幕
2022-08-11 05:15:00 【双子座断点】
QT 使用GrabWindow截取屏幕,本文提供代码示例和Demo程序。
编译环境:QT6/5 运行环境:X64/32 WIN10/11
本文作者原创,转载请附上文章出处与本文链接。
QT GrabWindow截取屏幕目录
1 .CPP
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//隐藏标题栏
setWindowFlags(Qt::FramelessWindowHint);//无边框 置顶
//设置窗口背景透明
setAttribute(Qt::WA_TranslucentBackground);
//全屏显示
showFullScreen();
//设置样式
this->setStyleSheet("#Widget{background-color: rgba(0, 0, 0, 150);}");
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *p1)
{
//绘制样式
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式
if(isPressedWidget)
{
//定义画笔
QPen pen;
pen.setWidth(5);
pen.setColor(QColor("#00B0AE"));
pen.setStyle(Qt::DashDotLine);
p.setPen(pen);
//创建画刷
QBrush brush;
brush.setColor(QColor("#00B0AE"));
brush.setStyle(Qt::Dense6Pattern);
p.setBrush(brush);
QRect tempRt(m_startPT, m_endPT);
p.drawRect(tempRt);
}
}
void Widget::mousePressEvent(QMouseEvent *event)
{
m_endPT = m_startPT = event->pos();
isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
QPoint tmp_pos=event->pos();
if(tmp_pos.x()>m_startPT.x() || tmp_pos.y()>m_startPT.y())
{
m_endPT = event->pos();
}
this->update();
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
isPressedWidget = false; // 鼠标松开时,置为false
QRect rect(m_startPT, m_endPT);
qDebug()<<"选择的范围:"<<rect;
qDebug()<<"rect.x(): "<<rect.x();
qDebug()<<"rect.x(): "<<rect.y();
qDebug()<<"rect.x(): "<<rect.height();
qDebug()<<"rect.x(): "<<rect.width();
QScreen *screen = QApplication::primaryScreen();
QPixmap pximap = screen->grabWindow(0, rect.x() ,rect.y(),rect.width() , rect.height());
QImage image = pximap.toImage();
image.save("D:\\CC.jpg");
close();
}
/*
工程: HTTP_Request
日期: 2022-8-9
作者: 双子座断点
环境: win10 QT5.12.6
功能: 进入全屏
*/
void Widget::on_pushButton_clicked()
{
showFullScreen();
}
/*
工程: HTTP_Request
日期: 2022-8-9
作者: 双子座断点
环境: win10 QT5.12.6
功能: 进入全屏
*/
//void Widget::on_pushButton_2_clicked()
//{
// showNormal();
//}
/*
工程: HTTP_Request
日期: 2022-8-9
作者: 双子座断点
环境: win10 QT5.12.6
功能: 进入全屏
*/
void Widget::on_pushButton_close_clicked()
{
close();
}
2 .h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStyleOption>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
//截取鼠标事件绘制窗口位置. 因为标题栏隐藏后.窗口是无法拖动的。
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *p);
private slots:
void on_pushButton_clicked();
//void on_pushButton_2_clicked();
void on_pushButton_close_clicked();
private:
Ui::Widget *ui;
bool isPressedWidget;
QPoint m_startPT;
QPoint m_endPT;
};
#endif // WIDGET_H
3 软件运行截图
项目源代码下载链接:CSDN
边栏推荐
- Flask framework learning: template inheritance
- Django--20 implements Redis support, context, and interaction of context and interface
- 如何设置pip安装的国内源
- (2) Docker installs Redis in practice (persistent AOF and RDB snapshots)
- 【Redis】Redis 的安装及图形化界面 Redis DeskTop Manager 的安装与使用
- Django--20实现Redis支持、上下文以及上下文和接口的交互
- ARM Architecture 4: Embedded Hardware Platform Interface Development
- 判断一个字符串是否为空,如果为空,对其赋值,如果不为空,获取字符的个数并打印第一个字符
- shell 脚本编程---入门
- 关于ie下href有中文出现RFC 7230 and RFC 3986问题的研究
猜你喜欢
Django--20实现Redis支持、上下文以及上下文和接口的交互
redis连接idea
flask框架学习:debug与配置项
【分享】一个免费语料库
Pytorch最全安装教程(一步到位)
[Embedded open source library] The use of cJSON, an efficient and streamlined json parsing library
【嵌入式开源库】cJSON的使用,高效精简的json解析库
0708作业---商品信息
vftpd本地可以连接,远程连接超时的解决
【win10+cuda7.5+cudnn6.0安装caffe②】安装Visual Studio 2013和caffe
随机推荐
软件测试风险识别
基于TF-IDF 文本相似性实战 详细教程
报表控件Stimulsoft报告中的数据矩阵条形码介绍
四大函数式接口
Idea提升工作效率的必备技巧
【Redis】Redis 的安装及图形化界面 Redis DeskTop Manager 的安装与使用
tensorflow代码翻译成pytorch代码 -详细教程+案例
(2) Docker installs Redis in practice (persistent AOF and RDB snapshots)
将double类型的数据转为字符串
切分字符串进行输出显示
[Embedded open source library] The use of MultiButton, an easy-to-use event-driven button driver module
面试宝典一: code题目记录
Mysql入门练习
【动态代理】CGLIB 动态代理的使用及原理
UML基本概念——动态视图
【分享】一个免费语料库
输入字符串,替换其中敏感词进行输出
Delphi7 learning record - demo example
基于 TF-IDF 文本匹配实战详细教程 数据+代码 可直接运行
Redis - Data Types (Basic Instructions, String, List, Set, Hash, ZSet, BitMaps, HyperLogLog, GeoSpatial) / Publish and Subscribe