在linux C界面播放代码设计时,有事会要求保留启动时的屏幕状态信息,或者实现定时截屏的功能,用QT可以很方便的实现截屏的功能。
代码:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPixmap>
#include <QScreen>
#include <QCoreApplication>
#include <QDateTime>
#include <QMessageBox>
#include <QThread>
#include <QStandardPaths>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
screen_once();
QThread::sleep(1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::screen_once()
{
QScreen *screen = QGuiApplication::primaryScreen();
QString filePathName = "Screen-";
QString desktopPath = "/home/picture";//截屏存放目录
filePathName += QDateTime::currentDateTime().toString("yyyy-MM-dd hh-mm-ss");//截屏文件名格式
filePathName += ".png";
if(!screen->grabWindow(0).save(desktopPath+filePathName, "png"))
{
QMessageBox::information(this,"SCreen shot","SCreen shot false!");
}
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void screen_once();
private slots:
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
linux 假设编译生成 可执行文件 Screen
linux C 调用即可,这里也可以使用system,建议使用popen。下为截取一次后杀死进程,也可以在QT中增加代码实现截屏后直接退出程序。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc,char * argv[])
{
FILE *fp;
fp = popen("./Screen", "r");
if(NULL == fp)
{
perror("popen执行失败!");
exit(1);
}
sleep(1);
fp = popen("pkill Screen", "r");
if(NULL == fp)
{
perror("popen执行失败!");
exit(1);
}
return 0;
}