一个基于Qt的截屏程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个基于Qt的截屏程序相关的知识,希望对你有一定的参考价值。

最近有一个arm板上的程序需要重写用户手册,在网上找了许久,没找到合适的截屏工具。于是只好自己动手做一个了。

因为arm板上有已经有了Qt环境,于是想到用 Qt的QPixmap::grabWindow 直接抓屏即可。

部署到arm设备后用com连接设备,抓屏,一步OK!虽然简单,但给编写手册的小伙伴们使用足够了。

代码没几行,贴上全部代码了。

#include <QApplication>
#include <QPixmap>
#include <QDesktopWidget>
#include <QDateTime>
#include <QFileInfo>
#include <iostream>
using namespace std;

void printHelp()
{
    QString msg =
            "grab screen tool v1.0.0(2016.06.15)\n"
            "author:[email protected]\n"
            "usage: grabscreen [path]";
    cout << msg.toLocal8Bit().data() << endl;
}

int main(int argc, char *argv[])
{
    if( argc > 2 )
    {
        printHelp();
        return 0;
    }

    QApplication a(argc, argv);

    QString path;

    QStringList args = QApplication::arguments();
    for( int n = 1; n < args.size(); n++ )
    {
        QString arg = args.at( n );
        if( arg.size() > 0 )
        {
            if( arg.startsWith( "--" ) )
            {
                if( arg == "--help" )
                {
                    printHelp();
                    return 0;
                }
            }
            else
            {
                if( path.isEmpty() )
                {
                    path = arg;
                }
            }
        }
    }

    if( path.isEmpty() )
    {
        path = QString("grabscreen%1.png").arg( QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz") );
    }
    else if( path.endsWith("/") || path.endsWith("\\") )
    {
        path += QString("grabscreen%1.png").arg( QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz") );
    }

    QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
    if( !pixmap.isNull() )
    {
        if( pixmap.save( path ) )
        {
            cout << "screen grabbed " << path.toLocal8Bit().data() << endl;
        }
        else
        {
            cout << "faile to save grabbed image to " << path.toLocal8Bit().data() << endl;
        }
    }
    else
    {
        cout << "grab screen failed!" << endl;
    }
    
    return 0;
}

以上是关于一个基于Qt的截屏程序的主要内容,如果未能解决你的问题,请参考以下文章

使用java awt最简单的截屏程序

按需截屏全python使用tkinter实现透明窗体实现实用的截屏功能(第五篇)

Python中的截屏模块 pyscreenshot

基于属性动画,实现 咔嚓截屏(收藏)动画

基于属性动画,实现 咔嚓截屏(收藏)动画

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)