资源简介

一个简单的小例子来看一看如何用Qt实现一个简单的截图功能,详情见博客 http://blog.csdn.net/goforwardtostep/article/details/54099742

资源截图

代码片段和文件信息

#include “capturescreen.h“
#include 
#include 
#include 

CaptureScreen::CaptureScreen(QWidget *parent)
: QWidget(parent)
 m_isMousePress(false)
{
initWindow();
loadBackgroundPixmap();
}

CaptureScreen::~CaptureScreen()
{

}

void CaptureScreen::initWindow()
{
this->setMouseTracking(true);
this->setWindowFlags(Qt::framelessWindowHint);
setWindowState(Qt::WindowActive | Qt::WindowFullScreen);
}

void CaptureScreen::loadBackgroundPixmap()
{
m_loadPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); //抓取当前屏幕的图片;
m_screenwidth = m_loadPixmap.width();
m_screenheight = m_loadPixmap.height();
}

void CaptureScreen::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_isMousePress = true;
m_beginPoint = event->pos();
}

return QWidget::mousePressEvent(event);
}

void CaptureScreen::mouseMoveEvent(QMouseEvent* event)
{
if (m_isMousePress)
{
m_endPoint = event->pos();
update();
}
return QWidget::mouseMoveEvent(event);
}

void CaptureScreen::mouseReleaseEvent(QMouseEvent *event)
{
m_endPoint = event->pos();
m_isMousePress = false;
return QWidget::mouseReleaseEvent(event);
}

void CaptureScreen::paintEvent(QPaintEvent *event)
{
m_painter.begin(this);          //进行重绘;

QColor shadowColor = QColor(0 0 0 100);                      //阴影颜色设置;
m_painter.setPen(QPen(Qt::blue 1 Qt::SolidLine Qt::FlatCap));    //设置画笔;
m_painter.drawPixmap(0 0 m_loadPixmap);                       //将背景图片画到窗体上;
m_painter.fillRect(m_loadPixmap.rect() shadowColor);           //画影罩效果;

if (m_isMousePress)
{
QRect selectedRect = getRect(m_beginPoint m_endPoint);
m_capturePixmap = m_loadPixmap.copy(selectedRect);
m_painter.drawPixmap(selectedRect.topLeft() m_capturePixmap);
m_painter.drawRect(selectedRect);
}


m_painter.end();  //重绘结束;
}

void CaptureScreen::keyPressEvent(QKeyEvent *event)
{
// Esc 键退出截图;
if (event->key() == Qt::Key_Escape)
{
close();
}
// Eeter键完成截图;
if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
{
signalCompleteCature(m_capturePixmap);
close();
}
}

QRect CaptureScreen::getRect(const QPoint &beginPoint const QPoint &endPoint)
{
int x y width height;
width = qAbs(beginPoint.x() - endPoint.x());
height = qAbs(beginPoint.y() - endPoint.y());
x = beginPoint.x() < endPoint.x() ? beginPoint.x() : endPoint.x();
y = beginPoint.y() < endPoint.y() ? beginPoint.y() : endPoint.y();

QRect selectedRect = QRect(x y width height);
// 避免宽或高为零时拷贝截图有误;
// 可以看QQ截图,当选取截图宽或高为零时默认为2;
if (selectedRect.width() == 0)
{
selectedRect.setWidth(1);
}
if (selectedRect.height() == 0)
{
selectedRect.setHeight(1);
}

return selectedRect;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2930  2017-01-09 09:47  Qt 之 实现简单截图功能(一)\capturescreen.cpp

     文件        834  2017-01-09 09:48  Qt 之 实现简单截图功能(一)\capturescreen.h

     目录          0  2017-01-09 10:39  Qt 之 实现简单截图功能(一)

----------- ---------  ---------- -----  ----

                 3764                    3


评论

共有 条评论