相关函数
[static] QDesktopWidget *QApplication::desktop()
Returns the desktop widget (also called the root window).
bool QPixmap::save(QIODevice *device, const char *format = Q_NULLPTR, int quality = -1) const
QPixmap QPixmap::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
[static] QPixmap QPixmap::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)
简单全屏截图实现
#ifndef IMAGECAPTURE_H
#define IMAGECAPTURE_H
#include <QWidget>
#include <QPixmap>
#include <QTimer>
#include <windows.h>
namespace Ui {
class ImageCapture;
}
class ImageCapture : public QWidget
{
Q_OBJECT
public:
explicit ImageCapture(QWidget *parent = 0);
~ImageCapture();
void contextMenuEvent(QContextMenuEvent *event);
public slots:
void startCapture(void);
void showCapture(void);
void saveImage(void);
private:
Ui::ImageCapture *ui;
QPixmap *capturePixMap;
QTimer *timer;
};
#endif
#include "imagecapture.h"
#include "ui_imagecapture.h"
#include <QApplication>
#include <QDesktopWidget>
#include <QDir>
#include <QFileDialog>
#include <QDebug>
#include <windows.h>
#include <QMenu>
#include <QAction>
#include <QContextMenuEvent>
ImageCapture::ImageCapture(QWidget *parent) :
QWidget(parent),
ui(new Ui::ImageCapture)
{
ui->setupUi(this);
setWindowTitle("截图");
capturePixMap = new QPixmap;
timer = new QTimer;
connect(ui->newPushButton, &QPushButton::clicked, this, &ImageCapture::startCapture);
connect(ui->savePushButton, &QPushButton::clicked, this, &ImageCapture::saveImage);
connect(ui->exitPushButton, &QPushButton::clicked, this, &ImageCapture::close);
connect(this->timer, &QTimer::timeout, this, &ImageCapture::showCapture);
}
ImageCapture::~ImageCapture()
{
delete ui;
}
void ImageCapture::startCapture(void)
{
this->hide();
timer->start(500);
}
void ImageCapture::showCapture(void)
{
timer->stop();
*capturePixMap = QPixmap::grabWindow(QApplication::desktop()->winId());
ui->imageLabel->setPixmap(capturePixMap->scaled(ui->imageLabel->size()));
this->show();
}
void ImageCapture::saveImage(void)
{
QString fileName = QFileDialog::getSaveFileName(this, tr("保存截图"), QDir::currentPath(), tr("image(*.png)"));
capturePixMap->save(fileName);
this->close();
}
void ImageCapture::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = new QMenu(this);
QAction *saveAction = new QAction("保存", this);
QAction *saveAsAction = new QAction("另存", this);
menu->addAction(saveAction);
menu->addAction(saveAsAction);
connect(saveAction, &QAction::triggered, this, &ImageCapture::saveImage);
connect(saveAsAction, &QAction::triggered, this, &ImageCapture::saveImage);
menu->exec(QCursor::pos());
}