Qt5.10实现QQ截图工具功能代码源码分析

为了做出一个QQ截图功能的模块,参考了网上某位网友的代码。这里我们分析一下主要代码。
源码已经过测试运行,不懂的留言即可。
源码地址:Qtjietu20191216.zip
1.首先我们一定会想到要对鼠标事件进行改写,包括点击,移动,释放,双击取消选区等功能。

```
//重写基类方法
void keyPressEvent(QKeyEvent *event);
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void contextMenuEvent(QContextMenuEvent *event);
```
2.我们肯定需要一个背景,然后可以在这个背景控件上去画我们的截屏框,这里我们就清楚了,首先点击截图按钮,触发创建一个全屏的widget,背景设置成透明暗色的,然后根据鼠标点的移动去绘制一个矩形框框,作为选区,然后鼠标释放的时候,或者鼠标右键点击的时候,出现保存选区菜单,最后将选区保存为一张图片即可。

```
void fullScreenWidget::loadBackgroundPixmap(const QPixmap &bgPixmap)
{
int width,height;
width = QApplication::desktop()->size().width();
height = QApplication::desktop()->size().height();

loadBackgroundPixmap(bgPixmap,0,0,width,height);
}

void fullScreenWidget::loadBackgroundPixmap(const QPixmap &bgPixmap, int x, int y, int width, int height)
{
loadPixmap = bgPixmap;
screenx = x;
screeny = y;
screenwidth = width;
screenheight = height;
initFullScreenWidget();
}
```
3.中间的难点就是如何将选区生成图片,以及计算一下鼠标的移动位置了。

```
QPixmap fullScreenWidget::getFullScreenPixmap()
{
initFullScreenWidget();
QPixmap result = QPixmap();
result = QPixmap::grabWindow(QApplication::desktop()->winId()); //抓取当前屏幕的图片

return result;
}
```
完整代码经运动通过,在Qt5.10上成功的。
有问题请留言。

原文地址:https://www.cnblogs.com/xcdm2018/p/12050180.html

时间: 2024-11-05 18:44:54

Qt5.10实现QQ截图工具功能代码源码分析的相关文章

leaflet地图全图以及框选截图导出功能(附源码下载)

前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet 的插件库,非常有用 内容概览 leaflet地图截图导出功能源代码demo下载 效果图如下: 本篇主要参考截图插件domtoimage:https://github.com/tsayen/dom-to-image地图全图导出直接用上面的domtoimage插件,然后矩形框选截图导出也是在domtoi

最值得关注的10个C开源项目之Webbench源码分析

Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. webbench压测的命令: webbench -c 300 -t 10 url 其中:-c  300 表示并发数(可以了理解成客户端), -t   10表示时间(秒) url   想要压测的url 下载链

第10课:[实战] Redis 网络通信模块源码分析(3)

redis-server 接收到客户端的第一条命令 redis-cli 给 redis-server 发送的第一条数据是 *1\r\n\$7\r\nCOMMAND\r\n .我们来看下对于这条数据如何处理,单步调试一下 readQueryFromClient 调用 read 函数收取完数据,接着继续处理 c→querybuf 的代码即可.经实际跟踪调试,调用的是 processInputBuffer 函数,位于 networking.c 文件中: /* This function is call

HDFSEventSink目录设置功能实现源码分析

这里以按自定义头部的配置为例(根据某些业务不同写入不同的主目录)配置:source: interceptors = i1 interceptors.i1.type = regex_extractor  interceptors.i1.regex = /apps/logs/(.*?)/ interceptors.i1.serializers = s1 interceptors.i1.serializers.s1.name = logtypename sink: hdfs.path = hdfs:/

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V3.4,增加系统设置、最近联系人、群功能(源码)

自从上次版本(GG叽叽V3.2,增加离线消息.离线文件功能)发布后,我个人觉得主要的大功能都实现得差不多了,接下来的几个版本将不断优化GG的细节,提高其可用性.这次版本更新的内容主要是为GG增加了系统设置.并完善的了群所需的基础功能. 一.GG V3.4 新增功能展现 1.群功能完善 (1)创建群 (2)退出群(同时,通知其它群成员) 2.系统设置 (1)叉掉主窗口时,关闭程序还是隐藏窗口. (2)麦克风设备索引 (3)摄像头设备索引 (4)开机自动启动 3.其它 (1)最近联系人列表. (2)

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)

尽力2~3周发布一个版本,我这次也没有失言.这段时间内,我仿照QQ的微云功能,在GG中增加了网盘的功能,而且,我还自创了一个QQ没有的新的功能:远程磁盘.正如远程桌面一样,远程磁盘允许我们像访问本地磁盘一样来访问在线的其它用户的磁盘. 一.GG V2.0 新增功能展现 (1)网盘:在服务端为每个用户分配一个网盘,用户通过客户端可以访问自己的网盘.就像QQ的微云一样. (2)远程磁盘:任何一个在线用户,都可以访问其它在线用户的磁盘(先要经过对方的同意). (3)无论是网盘.还是远程磁盘,都支持:上

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)

QQ的远程协助.或者说桌面共享是一个非常实用的功能,所以,2.4版本的GG复制了它,而且,GG增强了桌面共享的功能,它可以允许指定要共享桌面的区域,这样,对方就只能看到指定区域的桌面,这对节省流量会非常有帮助. GG实现这些功能的过程并不是那么简单,因为内部业务逻辑的关联容易把人搞晕.从运行起来的程序来说,远程协助的场景很容易理解:一方是请求方,一方是协助方,边界非常清晰.但是在程序中,无论是哪一方,其对应的窗体都是ChatForm,所以,在编码时,你经常需要切换你的思维:一会要站在请求方的角度

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)

(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做做小项目也是不错的,这未尝不是一条养家糊口之路了?呵呵) 距离上次更新(GG叽叽V3.0,完善基础功能)正好有1个月了,在这个月中,我主要为GG增加了离线消息和离线文件的功能.之所以将这两个功能提前实现,是因为至GG发布以来,就有很多朋友问我在GG的基础上如何实现离线消息和离线文件.看来作为一个能用

可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)

(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做做小项目也是不错的,这未尝不是一条养家糊口之路了?呵呵) 距离上次更新(GG叽叽V3.0,完善基础功能)正好有1个月了,在这个月中,我主要为GG增加了离线消息和离线文件的功能.之所以将这两个功能提前实现,是因为至GG发布以来,就有很多朋友问我在GG的基础上如何实现离线消息和离线文件.看来作为一个能用