Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)
概述
windows平台,使用Qt Widget实现一个简易截图工具,支持选区角落拖动缩放、选区移动,支持保存,复制到粘贴板,支持快捷键调出截图、退出截图。暂不支持对截图进行编辑操作,以及鼠标移动到程序窗口可以自动识别,后去有需求可以加上。
本文代码下载在这里
先看效果:
选区后会弹出三个按钮,从左到右分别是:退出、保存到文件、复制到粘贴板。如果选择复制到粘贴板,就可以直接在其他地方进行粘贴截图。
当鼠标在选区上下左右四个角落按下后会出现操作选区,此时拖动鼠标可以改变选区大小。 选区左上角可以实时显示选区的尺寸。
快捷键操作:
Alt+A : 开始截图
Esc:退出截图
正文
截图部分关键代码,使用windows接口实现
int width = GetSystemMetrics(SM_CXVIRTUALSCREEN);int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);// 获取窗口的设备上下文(Device Contexts)HDC hdcWindow = GetDC(GetDesktopWindow()); // 要截图的窗口句柄,为空则全屏// 获取设备相关信息的尺寸大小int nBitPerPixel = GetDeviceCaps(hdcWindow, BITSPIXEL);CImage image;image.Create(width, height, nBitPerPixel);BitBlt(image.GetDC(), // 保存到的目标 图片对象 上下文0, 0, // 起始 x, y 坐标width, height, // 截图宽高hdcWindow, // 截取对象的 上下文句柄0,0,/*m_pParentView->x(), m_pParentView->y(),*/ // 指定源矩形区域左上角的 X, y 逻辑坐标SRCCOPY);// 释放 DC句柄ReleaseDC(nullptr, hdcWindow);// 释放图片上下文image.ReleaseDC();WCHAR wfile[256];memset(wfile,0, sizeof(wfile));tempSavePath.toWCharArray(wfile);HRESULT result = image.Save(wfile, Gdiplus::ImageFormatPNG);QImage shot = cutImage(rect, QImage(tempSavePath));if (bSave){ bool bResult = shot.save(savePath, "png");}
将图片数据复制到系统粘贴板中:
QMimeData * mimeData = new QMimeData;
mimeData->setImageData(shot);
qApp->clipboard()->setMimeData(mimeData);
注:shot是QImage类型。
本文代码下载在这里
Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)相关推荐
- QT编写简易截图工具
QT编写简易截图工具 Windows和Linux下编译通过,版本5.9.1 ##设计界面 新建Widget项目,进入ui设计界面,添加QLabel和两个QPushButton,布局如下: Button ...
- 怎么画图自动生成HTML,用canvas写一个简易画图工具
本文将为您描述用canvas写一个简易画图工具,具体操作方法: Document style="border:1px solid #000000;">您的浏览器不支持canv ...
- Qt制作一个相册浏览工具
如何用Qt制作一个相册浏览的小程序? 程序开发思路如下: 1.支持多张相片浏览,可翻页浏览,相片可从本地导入; 2.相片要有放大和缩小的功能; 3.相片可自动浏览,时间间隔可自定义. 主要的代码如下: ...
- 原生js实现canvas画布中绘制、移动、拖拽、删除矩形(如简易截图工具)
功能描述 待图片上传并加载完成后,重新生成画布: 鼠标在画布区域内绘制,移动,拖拽,删除矩形(如截图工具一般): isboundary() 判断是否需要判断边界问题,默认false. 效果截图 实现代 ...
- 用canvas实现一个简易绘图工具
先看效果 这里可以选择颜色,从而进行在600px*400px画布中,随便画 ★HTML架构部分 <!-- HTML架构部分 --> <div><h3>简易绘图工具& ...
- qt实现一个简易的计算器
一.下载qt 下载地址:http://download.qt.io/archive/qt/ 下载安装教程:https://blog.csdn.net/cfan927/article/details/9 ...
- 利用Qt制作一个简易聊天软件
需求分析 即时通讯软件是通过即时通讯技术来实现在线聊天.交流的软件.需要完成基本的通信需求及工作场景需求. 架构分析 截图展示 项目简介 我们编写的即时通信软件叫做SeeU,它是一款基于Qt开发平台, ...
- 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动
OpenCV实现视频播放器,其思路大致就是在线程中使用OpenCV中的VideoCapture循环读取本地视频的每一帧Mat,然后发送到界面转换成QImage进行显示,而进度条拖动则用到了VideoC ...
- linux qt小型计算器课程设计,用Qt设计一个简易计算器
Qt工作原理: 事件驱动,信号与槽原理. 要实现简易计算器的设计需要将界面按钮转到槽,具体程序如下: Widget.h : #ifndef WIDGET_H #define WIDGET_H #inc ...
最新文章
- escape sequence
- 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )
- MVC 自定义IModelBinder实现json参数转Dictionarystring, string
- poj 2947 Widget Factory
- 成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题
- python 对象真假值的实例(哪些视为False)
- Rust 社区求变,PHP 大旗不倒?
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
- html设置了标签但是定义不了,在HTML标签管理器中设置不带元素ID的HTML中的事件...
- Android写的一个设置图片查看器,可以调整透明度
- [Java] lomboz开发插件 (对于J2EE)
- 新概念二册 Lesson 29 Taxi!出租汽车! (复习现在完成时)
- 漫画:什么是 B+ 树?
- EXCEL批量加入图片
- 基于leaflet-velocity的二维动态风场展示
- 在线教育20年:在线教育的未来发展趋势
- ad中按钮开关的符号_电工最常用电气元件实物图及对应符号
- 调节睡眠周期(有助睡眠)
- 微过滤器驱动开发指南
- 《Java核心技术卷一》读书笔记
热门文章
- V2V-PoseNet:Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from...
- OIM实现OIM用户修改、OIM用户Disable流程审批
- antd Table设置固定高度
- 爆肝!朋友做了个编程导航网站!
- 【学习】如何制作手机端html模板(REM的实际应用)
- 从底层逻辑聊日报设计与公司治理
- CVPR 2022 | Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络
- husky实现git commit规范
- webase1.5.3离线企业部署教程
- 计算机专业有哪些好的国企,这十大专业在国企中最受欢迎,待遇高、前景好,有你吗...