zoukankan      html  css  js  c++  java
  • [转]

    截屏(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的窗口坐标有关,附图一张,胜过千言万语

  • 相关阅读:
    drf 之 JWT认证 什么是集群以及分布式 什么是正向代理,什么是反向代理
    drf 之自定制过滤器 分页器(三种)如何使用(重点) 全局异常 封装Response对象 自动生成接口文档
    课堂练习之“寻找最长单词链”
    《人月神话》读书笔记(三)
    用户体验
    第十四周进度报告
    课堂练习之“寻找水王”
    《人月神话》读书笔记(二)
    第二阶段冲刺(十)
    第二阶段冲刺(九)
  • 原文地址:https://www.cnblogs.com/suanec/p/4170662.html
Copyright © 2011-2022 走看看