admin 管理员组文章数量: 1184232
最近项目需要使用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扩展屏下截图存在问题
版权声明:本文标题:Qt实现截图之一 截图_qt截图 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1774348892a3570707.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论