截屏功能就是将截屏时刻的屏幕画面保存为图片。所以截屏的关键就在于如何获取屏幕的内容,幸运的是Qt为我们提供了这样的接口。它就是QScreen类的grabWindow函数。函数声明如图:
函数返回的就是图片,参数是窗口ID和要截取的区域(x、y、width和height组成的矩形区域)。窗口ID可以通过QWidget的winId()获得,若截取整个屏幕窗口ID传入0。测试代码:
QApplication::primaryScreen()用于获取电脑的当前设置的主屏幕,x、y、width和height使用默认值,表示获取整个屏幕。获取屏幕图片后使用label显示出来,label设置为无边框(Qt::FramelessWindowHint),大小和屏幕一样大。
程序运行后点击截屏按钮后好像电脑死机一样,点击屏幕所有地方都没有反应,那是因为用来显示截屏图片的label将整个窗口都覆盖住了。获得整个屏幕的图片之后想要实现自定义区域截图就简单了,只需要通过窗口的鼠标移动事件来获取截图区域,然后用QPixmap的copy函数复制屏幕图片的区域即可,有兴趣的可以试一试。
测试环境:Q