QT 截取屏幕的实现

摘要:
QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上的窗体存成一个QPixmap格式的图片,很容易再将QPixmap存成文件。

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 两种方式,差别在于带不带 标题栏

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

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

免责声明:文章转载自《QT 截取屏幕的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?thinkphp3.2.3 使用配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

function类型(c++11)

1.c++五大可调用的对象   可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函数 void fun1(int a) { cout << a << endl; } void fun2(int a)...

算法训练 删除数组零元素

算法训练 删除数组零元素   时间限制:1.0s   内存限制:512.0MB     从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中...

Android游戏开发教程之六:自定义View详解

  在Android游戏开发中,有时Android控件不能满足我们的要求,就有必要使用Android自定义View。自定义View实现起来也不难,就是先继承View类,然后重写构造函数、onDraw、onMeasure等函数。        View需处理的三个问题        对于常规的游戏,我们在View中需要处理以下几种问题: 1.控制事件;...

高起播低延时RTSP网页无插件流媒体播放器EasyPlayerRTSPwin播放库接口调用说明

需求分析 一般对于一个播放器,应该支持如下几种显示模式: 等比例,最大化区域显示,不裁剪 等比例,最大区域显示,裁剪 拉伸显示,铺满全屏 要实现这几种显示模式。其实只要对播放控件的布局进行些许调整即可。那EasyPlayer是怎么实现的呢? 应用场景 EasyPlayer-RTSP在多年与VLC的对标过程中,积累了广泛的应用场景,EasyPlaye...

Java(使用JNA)调用DLL库与C#调用DLL库的对比

前言:在项目中经常使用DLL库对硬件进行操作,在发卡过程中使用频率尤为多,今天就Java与C#中调用DLL库的使用区别做一个介绍,本文着重具体的代码编写,具体过程看以下代码。 前提条件: 笔者已经封装了一个DLL库名为:testdll.dll(具体封库细节,请查阅相关资料),库中包含两个函数: 注:Add为两个整数相加,Sub为两个整数相减。 1.C#...

c语言中的原子操作

参考文章:https://blog.csdn.net/yikai2009/article/details/8650221 1. 原子操作:原子操作指的是在执行过程中不会被别的代码所中断的操作.。分为 位 和 整型变量 两类原子操作。 typedef struct { volatile int counter; } atomic_t; 2. 原子操作函数 分...