一个基于Qt的截屏程序

时间:2022-02-24 09:13:08

最近有一个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:tech@baijunjie.com\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;
}