news 2026/8/19 15:19:12

Qt 实现功能丰富的截屏工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt 实现功能丰富的截屏工具

Qt实现的一个截屏,并且可画线、画矩形、画圆、进行编辑,保存。 使用了开源的Qt全局热键,主要使用QxtGlobalShortcut类文件实现的。 源码: 使用Qt5.6.1_MinGW编译通过。 c.29

最近在研究 Qt 开发,实现了一个超有趣的截屏小工具,不仅能截屏,还能在截屏上进行画线、画矩形、画圆以及编辑操作,最后还能保存,非常实用。而且用到了开源的 Qt 全局热键,主要借助 QxtGlobalShortcut 类文件来达成这一酷炫功能。源码基于 Qt5.6.1_MinGW 编译通过。

实现思路

  1. 截屏功能:通过获取屏幕设备上下文,将屏幕内容绘制到一个 QPixmap 上,这样就实现了截屏。
QPixmap captureScreen() { QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); return pixmap; }

这段代码很简洁,QPixmap::grabWindow(QApplication::desktop()->winId())直接抓取了整个桌面窗口的内容,并返回一个 QPixmap 对象,这个对象就代表了截取的屏幕图像。

  1. 绘图操作:利用 QPainter 类来实现画线、画矩形、画圆等操作。以画直线为例:
void drawLine(QPixmap &pixmap, QPoint start, QPoint end) { QPainter painter(&pixmap); painter.setPen(QPen(Qt::red, 2)); painter.drawLine(start, end); }

这里创建了一个 QPainter 对象,传入要绘制的 QPixmap。设置画笔为红色,宽度为 2,然后调用drawLine方法,从起始点start画到终点end。画矩形和画圆的操作类似,只是调用不同的QPainter方法,比如画矩形用drawRect,画圆用drawEllipse

  1. 编辑功能:可以对绘制的图形进行移动、删除等编辑。这部分实现稍微复杂点,需要记录每个图形的属性和位置等信息。比如,为了移动一个矩形,我们需要重新计算它的左上角顶点位置,然后重新绘制。
  1. 保存功能:使用QPixmapsave方法将编辑后的图片保存到指定路径。
void savePixmap(const QPixmap &pixmap, const QString &path) { pixmap.save(path); }

这里传入要保存的QPixmap和保存路径pathsave方法会自动根据路径的文件后缀,选择合适的图片格式进行保存。

Qt 全局热键的使用

这部分借助了 QxtGlobalShortcut 类文件。首先要引入相关头文件:

#include "qxtglobalshortcut.h"

然后在代码中创建一个全局热键实例,比如设置截屏的热键为Ctrl + Shift + S

QxtGlobalShortcut *shortcut = new QxtGlobalShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S), this); connect(shortcut, SIGNAL(activated()), this, SLOT(takeScreenshot()));

这里创建了一个QxtGlobalShortcut对象,指定了热键组合Ctrl + Shift + S,并连接了activated信号到takeScreenshot槽函数,当按下这个热键组合时,就会触发截屏操作。

总的来说,通过这些功能的组合,打造出了一个功能齐全的截屏工具。希望这篇博文能给同样在研究 Qt 开发的小伙伴一些启发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 9:45:25

JoyAgent-JDGenie系统架构设计

系统架构设计 📌 查看流程图说明 本文档使用 Mermaid 语法绘制流程图。如果流程图无法正常显示,请使用以下方式查看: VS Code: 安装 “Markdown Preview Mermaid Support” 扩展 GitHub/GitLab: 直接查看,自动支持 Mermaid 在线编辑器: 访问 Mermaid Live Editor 复制代码…

作者头像 李华
网站建设 2026/8/19 14:13:00

关于javaSE异常的处理(看这一篇就够了)

目录 一、异常是什么 1.异常的概念 2.异常的分类 二、异常的处理 1.防御式编程 2.(异常的抛出)throw的使用 3.异常的声明-throws 4.捕获异常-try-catch捕获并处理异常 5.finally关键字起到 三、异常的处理流程 四、总结 一、异常是什么 1.异常…

作者头像 李华
网站建设 2026/8/19 15:10:01

使用 deepseek 快速搭建 TDengine IDMP demo

背景 TDengine IDMP 产品的客户多为工控场景。在工控体系中,系统自下而上通常划分为现场设备层、现场控制层、过程监控层、生产管理层以及企业资源层。因此,最初的数据来源于现场设备层,这些数据也是后续所有业务驱动的来源。对于TDengine而…

作者头像 李华
网站建设 2026/8/18 23:44:18

Windows系统文件Windows.Devices.Picker.dll缺少损坏问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/8/18 18:11:18

Python property魔法:让属性访问变得智能又安全

一、property基础:从数据封装开始 1.1 为什么需要属性封装? 在面向对象编程中,数据封装是基本原则之一。直接暴露属性可能导致数据不一致和逻辑错误。 # 问题示例:直接访问导致数据不一致 class BankAccount:def __init__(self, b…

作者头像 李华
网站建设 2026/8/19 12:41:30

基于Java Swing的打砖块小游戏(2)

1、演示视频 基于Java Swing的打砖块小游戏2、项目截图 设计说明 3.1 整体架构设计 项目采用分层设计面向对象封装的架构&#xff0c;主要分为以下几个部分&#xff1a; 界面层&#xff08;UI层&#xff09;&#xff1a;由<代码开始>BreakoutGame<代码结束>类中…

作者头像 李华