QT实现类似QQ的截图功能

QT实现截图功能整个工程量还是有一点大的, 我只踢动一个自己的思路,希望大家能够开发出更多的实现方法:

一.当我们按下我们的截屏快捷键时,像qq那样,会让整个显示屏蒙上一层雾

首先,我们得集成QLabel或者QWidget,并且让我们所继承的Label(假定你选择了继承QLabel)无边框,全屏,置顶显示(这些还是很简单的,不会的话可以可以自己百度一下),然后用QPixmap::grabWIndow()(不过这个函数好像QT已经不推荐使用了,现在大概是QScreen::grabWindow)这个函数截取当前页面的一张图片(这个函数就相当于截全屏),把这个图片放到了label上,怎么设置一层雾状呢?这个我们可以在构造函数里再定义一张图片pixmap然后给它设置一个透明的颜色,再用painter的drawPixmap函数把这个图片画上去。

二.当鼠标移动的时候怎么动态显示鼠标当前截取矩形的图片呢?

这个肯定是要写鼠标事件的,变量里面肯定得有两个点,一个鼠标按下时的起点Origin    一个鼠标当前所在的位置,在mouseMoveEvent函数中,当鼠标当前的位置不断改变时,两个点就可以形成一个矩形了(虽然这么说很奇怪 ,但是就是这样,就像跟橡皮筋一样),这个矩形就是我们所要显示出来的那一块儿,此时通过QPixmap::copy函数在我们截取的全屏的那张图片截出这一块儿,我们就可以用painter的drawPixmap画图了。这个时候当我们的鼠标拖到什么地方都可以显示出拖的那一块儿图了。

三.如何截取圆形图片或者其他形状的图片

在截矩形图的基础上改进一下,用setMask函数,就可以吧矩形图改成方形的了,就不多说了。

四.如何保存文件?

这个比较简单,QDir的构造函数打开一个文件路径,QDir::mkdir可以访问指定的文件夹,如果没有此文件夹,则会创建它

五.如何实现快捷键?

如果你只是再程序里写了onKeyPressEvent事件来当做快捷键,那么恭喜你,当你的程序窗口没有获取焦点时,你的快捷键根本就不起作用。那么这个怎么实现呢?百度一下“QT”实现全局热键,会有很多的方法,基本上要么就是用了第三方库要么就是自己再代码中注册全局热键。Qt里面有一个QAbstractNativeEventFilter类,用于处理Windows系统消息的,我们一般的做法是继承它,在其构造函数中使用windows的API    registerHotKey,然后再析构函数中使用UnRegisterHotKey,重写其nativeEventFilter发出一个信号,然后再main函数里面使用signal和slot函数建立关联就好了





,,,,,,,,,,,,,,说了半天,也不知道说清楚了没,如果想要更加详细的代码,请到我的资源中下载,链接是:点击打开链接


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值