您当前的位置: 首页 >  qt

令狐掌门

暂无认证

  • 0浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt应用窗口截图代码演示

令狐掌门 发布时间:2021-05-13 18:05:50 ,浏览量:0

  本篇介绍如何使用Qt进行屏幕或应用窗口截图。   QScreen类提供了很多与屏幕相关的API, 例如抓屏API:

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

  传入窗口Id, 位置,宽高,如果WId是屏幕的句柄,那么截取的就是屏幕,如果WId是应用窗口的句柄,那么截取的就是应用窗口。   新建一个GUI项目,下面就把抓取的屏幕在Qt界面上显示出来,   .h文件

#pragma once

#include 
#include "ui_RecordScreen.h"

class RecordScreen : public QMainWindow
{
    Q_OBJECT

public:
    RecordScreen(QWidget *parent = Q_NULLPTR);

    void paintEvent(QPaintEvent* e) override;
    void timerEvent(QTimerEvent* e);

private:
    Ui::RecordScreenClass ui;

    QScreen* m_pScreen = nullptr;
};

  头文件主要是申明一个QScreen的指针,重写绘制事件、定时器事件。

  .cpp文件

#include "RecordScreen.h"
#include 
#include 
#include 
#include 


RecordScreen::RecordScreen(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	m_pScreen = QGuiApplication::primaryScreen();

    startTimer(40);   //1秒25帧
}

void RecordScreen::paintEvent(QPaintEvent* e)
{
	//截取全屏, 指定窗口Id进行截屏
	QPixmap pix = m_pScreen->grabWindow(QApplication::desktop()->winId());  
	
	//绘制截屏
	QPainter p;
	p.begin(this);
	p.drawImage(QPoint(0, 0), pix.toImage());
	p.end();
}

void RecordScreen::timerEvent(QTimerEvent* e)
{
	update();  //更新窗口
}

  在构造函数中先获取到QScreen对象,启动定时器;paintEvent方法中抓取屏幕,这里的窗口ID是指定的整个屏幕;定时器事件主要调用update刷新窗口。   想指定其它窗口其实也很简单,每个窗口都是QWidget, 直接调用WId方法即可获取到窗口Id, 在Win32里叫HWND窗口句柄。 在这里插入图片描述   运行效果如下: 在这里插入图片描述 除了显示屏幕动态,也可以保存为图片,调用QPixmap类save方法即可。

关注
打赏
1652240117
查看更多评论
立即登录/注册

微信扫码登录

0.0881s