Qt实现截图之一 截图

9 篇文章 0 订阅

最近项目需要使用qt实现截图功能,再次记录一下,希望对您有所帮助,qt我是用的是5.9.9版本。

1.截图

qt截图推荐使用QScreen来实现截图,使用grab这种方式只能截窗体且窗体如果是opengl窗体或者视频窗体无法获取数据。

1.截主屏幕

截主屏幕代码相对简单

   QScreen* screen = QApplication::primaryScreen();
    QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(),
                        offsetX,
                        offsetY,
                        screenwidth,
                        screenheigh);

第一个参数也可以传递为NULL,这样默认截主屏幕。

也可以截窗口,第一个参数传递窗口的winId,注意如果窗口是opengl窗口或者播放视频的窗口截图会失败。

2.截图支持扩展屏

要接扩展屏就不能使用

 QApplication::primaryScreen();

获取QScreen对象了,需要找到屏幕对应的QScreen,首先根据窗口找到屏幕编号,然后找到对应的QScreen如下:

    int  screenNumber = QApplication::desktop()->screenNumber(widget);
    QScreen* screen = QApplication::screens().at(screenNumber);

然后截图就跟上面一样。

3.高屏幕截图

上面的方法只是对普通屏幕的截图,一般的屏幕缩放因子为1,所以没有问题,但对于mac屏幕来说,你会发现截图存在问题。

1.首先我们获取缩放因子

可以通过QApplication::desktop()获取,也可以通过QWidget来获取,这里我通过widget来获取

 double devicePixelRatiovalue = widget->devicePixelRatio();

2.截图

    QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(),
                        offsetX,
                        offsetY,
                        screenwidth/devicePixelRatiovalue,
                        screenheigh/devicePixelRatiovalue);

 

注意:qt在mac扩展屏下截图存在问题

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值