[转] - 使用Qt作窗口截屏(含源码)
截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件。介绍的好像有点多余:(,那我们就直接切入正题。
QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上的窗体存成一个QPixmap格式的图片,很容易再将QPixmap存成文件。函数使用很简单,两行代码就可以。
QPixmap pixmap = QPixmap::grabWidget(this);//this是调用该函数的QWidget *指针
pixmap.save(“widget.png”,”png”);
这两个函数的区别,我个人理解是grabWindow可以抓取窗口管理器的内容,如果不是应用的顶层窗口,那么grabWidget和grabWindow没什么区别。下面是我的两个截图,一个带窗口管理器的,一个不带。


下面是一个简单的源码演示,在blog页上点击按钮的时候调用grabWindow(),在bbs页上点击大按钮的时候去调用grabWidget().注意,我在第一个页里调用的是整个desktop的窗口id,然后根据坐标取到了当前窗口的截图。所以你也可以通过它去获取非Qt窗口的截图,当然你需要一点X11的知识设法搞到其它窗口的坐标。
源码:
#include <QApplication>
#include <QDesktopWidget>
#include <QTabWidget>
#include <QPushButton>
#include <QPixmap>
class MyTabWidget:public QTabWidget{
Q_OBJECT
public slots:
void snapshot1(){
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(),pos().x(),pos().y(),frameGeometry().width(),frameGeometry().height());
pixmap.save(“blog.png”, “png”);
}
void snapshot2(){
QPixmap pixmap = QPixmap::grabWidget(this);
pixmap.save(“bbs.png”, “png”);
}
};
int main(int argc,char *argv[]){
QApplication app(argc,argv);
MyTabWidget tabw;
QPushButton *pb1=new QPushButton(“http://www.cuteqt.com/blog”,&tabw);
QPushButton *pb2=new QPushButton(“http://www.c0teqt.com/bbs”,&tabw);
tabw.addTab(pb1,”blog”);
tabw.addTab(pb2,”bbs”);
tabw.connect(pb1,SIGNAL(clicked()),&tabw,SLOT(snapshot1()));
tabw.connect(pb2,SIGNAL(clicked()),&tabw,SLOT(snapshot2()));
tabw.resize(300,200);
tabw.show();
return app.exec();
}
#include “main.moc”
源码里用到的一点坐标知识,和Qt的窗口坐标有关,附图一张,胜过千言万语
[转] - 使用Qt作窗口截屏(含源码)的更多相关文章
- Qt项目开发实例 (含源码)
		
源码传送门: 啊渊 / QT博客案例 · GitCode 目前QT的研发都是基于windows操作系统的,本文分享在国产操作系统中学QT的路线图,其实学习路线差不多,为了全面的回顾自己的学习知识,打算 ...
 - selenium学习-对当前浏览器窗口截屏
		
方法:get_screenshot_as_file(filename) # coding=UTF-8 #16.对当前浏览器窗口截屏 import sys reload(sys) sys.setdefa ...
 - 原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)
		
原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想) 总体思想: 希望让调用方通过 http调用传入一个需要生成图片的网页链接生成一个网页的图片并返回图片链接 ...
 - C++ JsonCpp 使用(含源码下载)
		
C++ JsonCpp 使用(含源码下载) 前言 JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择JSON的全称为:JavaScri ...
 - 如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码
		
如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码 1.Delphi编译方式介绍: 当我们在开发一个常规应用程序时,Delphi可以让我们用两种方式使用VCL,一种是把VCL中的申明 ...
 - 微信公众平台开发-OAuth2.0网页授权(含源码)
		
微信公众平台开发-OAuth2.0网页授权接口.网页授权接口详解(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 在微信开发的高级应用中,几乎都会使用到该接口,因为通过该接口,可以获 ...
 - 微信公众平台开发-access_token获取及应用(含源码)
		
微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...
 - 微信公众平台开发-微信服务器IP接口实例(含源码)
		
微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 学习了access_token的获取及应用后,正式的使用access_token ...
 - jQuery使用():Deferred有状态的回调列表(含源码)
		
deferred的功能及其使用 deferred的实现原理及模拟源码 一.deferred的功能及其使用 deferred的底层是基于callbacks实现的,建议再熟悉callbacks的内部机制前 ...
 
随机推荐
- 62. 链表重排[Reorder List]
			
[本文链接] http://www.cnblogs.com/hellogiser/p/reorder-list.html [题目] Given a singly linked list L: L0→L ...
 - JS控制DIV隐藏显示
			
转载自:http://blog.sina.com.cn/s/blog_6c3a67be0100ldbe.html JS控制DIV隐藏显示 一,需求描述: 现在有3个DIV块,3个超链接,需要点击一个链 ...
 - dt.jar设计时rt.jar运行时
			
很多人在初学Java的时候,都要配置环境变量.在配置CLASSPATH的时候,都会加上一个当前目录.,还有两个jar:dt.jar和tools.jar.其实好多人都不了解这两个jar的作用,尤其是dt ...
 - Secure Socket Tunneling Protocol Service服务无法启动(win7)
			
第一种方法: 1.确认一下服务都开启: Base Filtering Engine IKE and Authip IPsec Keying Module Ipsec Policy Agent Wind ...
 - Struts2标签库
			
一. 写jsp页面的时候,在struts2中,用的是s标记,先引入标记: <%@ taglib prefix="s" uri="/struts-tags" ...
 - CPU的性能对比
			
笔记本CPU之前的性能对比 下面的分数都是根据PerformanceTest测试的出来的结果,现在的笔记本CPU有很多种,你在购买笔记本的时候只看到CPU的型号,而且现在的CPU型号太多而且命名方式也 ...
 - Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式
			
转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236 Spring获取ApplicationContex ...
 - Z.XML第二次迭代分数分配
			
这是一篇简介的日志. 它关于二轮迭代Z-XML团队7名成员的分数分配. 每名成员的工作内容与之前的任务分工相同,即,大家都非常好的完成了计划的工作. 按照最初设定的分数分配原则,在今晚大家吃全家桶之前 ...
 - SqlServer 函数 大全
			
sql server使用convert来取得datetime日期数据 sql server使用convert来取得datetime日期数据,以下实例包含各种日期格式的转换 语句及查询结果: Selec ...
 - isnull的使用方法
			
is null 查看列数据为空 select*from lrb where lrid is null ISNULL使用指定的替换值替换 NULL. 语法ISNULL ( check_express ...