QPixmap提供了两个函数 grabWidget 和 grabWindow 可以将屏幕上的窗体存成一个 QPixmap 格式的图片,很容易再将 QPixmap 存成文件。函数使用很简单,两行代码就可以:

QPixmap pixmap = QPixmap::grabWidget(this); //this是调用该函数的QWidget 指针
pixmap.save(“widget.png”,”png”);

两个函数的原型如下:

QPixmap QPixmap::grabWindow ( WId window, int x=0, int y=0, int w=-1, int h=-1 )

  • WId 表示被截取窗口的ID号
  • x, y 表示截取范围的起始坐标
  • w, h 分别表示截取范围的宽度和高度,如果为 -1,则表示全部截取

QPixmap QPixmap::grabWidget ( QWidget * widget, int x=0, int y=0, int w=-1, int h=-1 )

widget表示被截取窗口的画布部分,其余参数同grabWindow

grabWidget 和 grabWindow 两种方式,差别在于带不带 标题栏

void MainWindow::on_pushButton_clicked()
{
QPixmap pixmap = QPixmap::grabWindow( QApplication::desktop()->winId(), pos().x(), pos().y(), frameGeometry().width(), frameGeometry().height() );
pixmap.save("d:\\a.bmp","bmp");
}
void MainWindow::on_pushButton_2_clicked()
{
QPixmap pixmap = QPixmap::grabWidget(this);
pixmap.save("d:\\b.bmp","bmp");
}

需要强调的是: 执行 grabWidget()的时候,会自动调用 paintEvent( QPaintEvent *event ) 进行重绘操作。

QT 截取屏幕的实现的更多相关文章

  1. Qt获取屏幕分辨率

    http://my.oschina.net/u/1255773/blog/159557 原 Qt获取屏幕分辨率 发表于1年前(2013-09-06 11:00)   阅读(546) | 评论(0) 3 ...

  2. Android实例-程序界面内截取屏幕(XE8+小米2)

    结果: 1.只能截取程序界面内的图片. 2.图片有点不清楚,自己设置清楚度. 实例代码: unit Unit1; interface uses System.SysUtils, System.Type ...

  3. cocos2d-x 截取屏幕可见区域

    在游戏中,我们经常需要分享到社交网络的功能.分享时,我们时常会需要用到截屏的功能.目前网上的文章虽然很多,但是都是截取的 设计分辨率(DesignResolutionSize)大小的屏幕,而这个并不是 ...

  4. jquery 截取屏幕

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. C# 截取屏幕图像

    #region 截取屏幕图像 private static Bitmap GetScreenCapture() { Rectangle tScreenRect = , , Screen.Primary ...

  6. html2canvas截取屏幕的方法

    html2canvas截取屏幕的方法 需要放在服务上运行,否则会报错, 放在服务器里,完美运行  处理截屏模糊的方法 html2canvas 0.5.0-beta3解决截图模糊问题 需要引入html2 ...

  7. C# 截取屏幕

    /// <summary> /// 截取屏幕 /// </summary> /// <param name="x">起点X坐标</para ...

  8. ffmpeg+nginx截取屏幕实时画面并进行rtmp推流在前端播放

    准备环境和文件 1.下载ffmpeg的包[https://foxbaby.lanzoui.com/iYjPmup51cd] 地址:https://ffmpeg.org/download.html#bu ...

  9. Qt窗口屏幕居中显示(有专门的QDesktopWidget,先计算后显示)

    窗口的屏幕居中显示问题,在各开发工具中原理相同,首先使用特定的方法得到显示屏幕的宽度和高度,再根据窗口本身的宽度和高度计算出窗口的左上角坐标位置. Qt中可以采用两种方法达到窗口的屏幕居中显示: 方法 ...

随机推荐

  1. dll 显示调用

    今天尝试写了一个简单的C++DLL,并且用另一个CPP调用它,啥都不说,先贴代码 1.DLL(冒泡算法) extern "C" 必须最左 _declspec(dllexport)和 ...

  2. javascript游戏引擎

    基于JavaScript开发的游戏是唯一一个能够跨桌面,Web和移动三种平台的.今天,本文向大家推荐一些非常棒的JavaScript游戏开发框架. AD:干货来了,不要等!WOT2015 北京站演讲P ...

  3. Library drmframework_jni not found

    http://piotrbuda.eu/2012/06/trying-to-solve-error-491-in-play-store-on-android-emulator.html http:// ...

  4. 开源项目PullToRefresh详解(一)——PullToRefreshListView

       开源项地址:https://github.com/chrisbanes/Android-PullToRefresh 下拉刷新这个功能我们都比较常见了,今天介绍的就是这个功能的实现.我将按照这个开 ...

  5. Orchard之生成新模板

    一:启用 Code Generation 进入后台, Modules –>  Developer Enable 之.   二:生成模版 首先,进入 Orchard 命令行 在 CMD 下到达解决 ...

  6. Installing Hyperledger Fabric v1.1 on Ubuntu 16.04 — Part I

    There is an entire library of Blockchain APIs which you can select according to the needs that suffi ...

  7. 支付宝 iphone6 指纹验证失败

    重启 iphone6  就可以了. 再次打开 支付宝 那个 指纹功能,就有一个弹出框 可以按指纹了.

  8. 在IIS上SSL的部署和启动SSL安全【转】

    在这次的项目中遇见了这个问题,之前我并懂了不了多少,只对了SSL和HTTPS理论了解.但并不知道在实际中如何运行.经过自己在网上查阅一番,最后靠自己解决了这个问题,现在在这里和大家分享一下.如果写的有 ...

  9. 一种多线程写日志文件的解决方案 c#源代码演示

    using System;using System.Collections.Generic;using System.Collections;using System.Text;using Syste ...

  10. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h

    DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...