本文主要是介绍Qt简单截屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
鼠标左键按下拉取截取范围,中间确认截图,右键取消截图。
#ifndef GRABWIDGET_H
#define GRABWIDGET_H#include <QWidget>
#include <QMouseEvent>class GrabWidget : public QWidget
{Q_OBJECT
public:explicit GrabWidget(QWidget *parent = 0);signals:public slots:public:void savePixmap();protected:void mouseMoveEvent(QMouseEvent *ev);void paintEvent(QPaintEvent *);void mousePressEvent(QMouseEvent *ev);void mouseReleaseEvent(QMouseEvent *ev);private:QPoint ptCur_;QPoint ptStart_;QPoint ptEnd_;bool isDrawing_;
};#endif // GRABWIDGET_H
#include "grabwidget.h"
#include <QApplication>
#include <QtGui>
#include <QDesktopWidget>GrabWidget::GrabWidget(QWidget *parent) :QWidget(parent)
{setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);setWindowOpacity(0.1);resize(QApplication::desktop()->width(), QApplication::desktop()->height());setCursor(Qt::CrossCursor);isDrawing_ = false;
}void GrabWidget::savePixmap()
{}void GrabWidget::mouseMoveEvent(QMouseEvent *ev)
{ptCur_.setX(ev->x());ptCur_.setY(ev->y());update();
}void GrabWidget::paintEvent(QPaintEvent *e)
{QWidget::paintEvent(e);int width, height;QPainter painter(this);painter.setPen(Qt::red);if (isDrawing_) {width = ptCur_.x() - ptStart_.x();height = ptCur_.y() - ptStart_.y();painter.drawRect(ptStart_.x(), ptStart_.y(), width, height);} else {if (ptEnd_ != ptStart_) {width = ptEnd_.x() - ptStart_.x();height = ptEnd_.y() - ptStart_.y();painter.drawRect(ptStart_.x(), ptStart_.y(), width, height);}}
}void GrabWidget::mousePressEvent(QMouseEvent *ev)
{if (ev->button() == Qt::MiddleButton) {hide();int width = ptEnd_.x() - ptStart_.x();int height = ptEnd_.y() - ptStart_.y();QPixmap tmpPixmap = QPixmap::grabWindow(QApplication::desktop()->winId(),ptStart_.x(), ptStart_.y(), width, height);QDateTime dt = QDateTime::currentDateTime();QString filename = dt.toString("yyyyMMddhhmmss") + ".jpg";tmpPixmap.save(filename, 0, 100);exit(1);} else if (ev->button() == Qt::RightButton) {exit(1);} else if (ev->button() == Qt::LeftButton) {ptStart_ = ev->pos();isDrawing_ = true;}update();
}void GrabWidget::mouseReleaseEvent(QMouseEvent *ev)
{if (ev->button() == Qt::LeftButton) {ptEnd_ = ev->pos();isDrawing_ = false;}
}
#include <QApplication>
#include "grabwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);GrabWidget grabWidget;grabWidget.setMouseTracking(true);grabWidget.show();return a.exec();
}
这篇关于Qt简单截屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!