Qt实现截屏并保存(转载)
原博地址:http://blog.csdn.net/qinchunwuhui/article/details/52869451?_t_t_t=0.28889142944202306
目前对应用实现截屏的方法还是比较多的,首先我们要了解Qt中的窗口的是如何设计的,不管是MFC下的窗口,还是其他窗口,仿佛都相似,曾经狂学MFC,结果毕业一次没用过已经还给老师,悲催,好了下面我们来介绍一下Qt的窗口设计吧!鸡冻吧….
1.首先我们来看看我从手册上盗取的图片
我们了解了Qt的窗口框架,让我们来看看她(羞涩的小菇凉,想多了….)提供的几个函数吧!
包括整个窗口:x(), y(), frameGeometry(), pos(), and move(). 提供这个几个函数,通过这个几个我们就可以方便的操作整个窗口的位置以实现截图啦。
不包含窗口框(其实就一个标题栏)的:geometry(), width(), height(), rect(), and size().,通过这个几个函数我们就可以操作窗口的的Client 区域了。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | QString fileName; QPixmap pix, bmp; pix =bmp.grabWindow(QApplication::desktop()->winId(),0,0, frameGeometry().width(),frameGeometry().height()); fileName= QDateTime::currentDateTime().toString( "yyyy-MM-ddHH-mm-ss" ) + ".bmp" ; //通过时间命名文件 if (pix.isNull()) { QMessageBox::information( this , "Error" , "截屏失败 !" , QMessageBox::Ok); } else { if (!pix.save( "../screen/" +fileName, "BMP" )) { QMessageBox::information( this , "Right" , "保存错误 !" , QMessageBox::Ok); } else { QMessageBox::information( this , "Grab" , "保存成功!" ,QMessageBox::Ok); } } |
PS:亲测可用!
如果把提示信息去掉,简化的写法为:
1 2 | QPixmap p=viewWidget->grab(QRect(20,20,320,480)); //截图区域可根据自己的面板调节,或用系统函数获取 p.save(QCoreApplication::applicationDirPath()+ "//a.png" , "png" ); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步