• 大小: 628KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: Qt  截图  capture  

资源简介

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

资源截图

代码片段和文件信息

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

// 选中矩形8个拖拽点小矩形的宽高;
#define STRETCH_RECT_WIDTH 6
#define STRETCH_RECT_HEIGHT 6

CaptureScreen::CaptureScreen(QWidget *parent)
    : QWidget(parent)
     m_currentCaptureState(InitCapture)
{
    initWindow();
    initStretchRect();
    loadBackgroundPixmap();
}

CaptureScreen::~CaptureScreen()
{

}

void CaptureScreen::initWindow()
{
    this->setMouseTracking(true);
    // 由于存在类似QQ这样界面始终显示在最顶层,设置属性 Qt::WindowStaysOnTopHint;
    this->setWindowFlags(Qt::framelessWindowHint | Qt::WindowStaysOnTopHint);
    setWindowState(Qt::WindowActive | Qt::WindowFullScreen);
    this->setMouseTracking(true);
}

void CaptureScreen::initStretchRect()
{
    m_stretchRectState = NotSelect;
    m_topLeftRect = QRect(0  0  0  0);
    m_topRightRect = QRect(0 0 0 0);
    m_bottomLeftRect = QRect(0 0 0 0);
    m_bottomRightRect = QRect(0 0 0 0);

    m_leftCenterRect = QRect(0 0 0 0);
    m_topCenterRect = QRect(0 0 0 0);
    m_rightCenterRect = QRect(0 0 0 0);
    m_bottomCenterRect = QRect(0 0 0 0);
}

// 获取当前屏幕图片;
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)
{
    m_stretchRectState = getStrethRectState(event->pos());
if (event->button() == Qt::LeftButton)
{
if (m_currentCaptureState == InitCapture)
{
m_currentCaptureState = BeginCaptureImage;
m_beginPoint = event->pos();
}
// 是否在拉伸的小矩形中;
else if (m_stretchRectState != NotSelect)
{
m_currentCaptureState = BeginMoveStretchRect;
// 当前鼠标在拖动选中区顶点时设置鼠标当前状态;
setStretchCursorstyle(m_stretchRectState);
m_beginMovePoint = event->pos();
}
// 是否在选中的矩形中;
else if (isPressPointInSelectRect(event->pos()))
{
m_currentCaptureState = BeginMoveCaptureArea;
m_beginMovePoint = event->pos();
}
}

    return QWidget::mousePressEvent(event);
}

void CaptureScreen::mouseMoveEvent(QMouseEvent* event)
{
    if (m_currentCaptureState == BeginCaptureImage)
    {
        m_endPoint = event->pos();
        update();
    }
    else if (m_currentCaptureState == BeginMoveCaptureArea)
    {
        m_endMovePoint = event->pos();
        update();
    }
else if (m_currentCaptureState == BeginMoveStretchRect)
{
m_endMovePoint = event->pos();
update();
// 当前鼠标在拖动选中区顶点时在鼠标未停止移动前,一直保持鼠标当前状态;
return QWidget::mouseMoveEvent(event);
}


    // 根据鼠标是否在选中区域内设置鼠标样式;
    StretchRectState stretchRectState = getStrethRectState(event->pos());
    if (stretchRectState != NotSelect)
    {
        setStretchCursorstyle(stretchRectState);
    }
    else if (isPressPointInSelectRect(event->pos()))
    {
        setCursor(Qt::Size

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-07-03 09:50  CaptureTest\
     文件       15195  2017-01-22 14:53  CaptureTest\capturescreen.cpp
     文件        1969  2017-01-20 09:23  CaptureTest\capturescreen.h
     文件         891  2017-07-03 09:50  CaptureTest\CaptureTest.cpp
     文件         520  2017-07-03 09:50  CaptureTest\CaptureTest.h
     文件          71  2017-07-03 09:35  CaptureTest\CaptureTest.qrc
     文件         732  2017-07-03 09:37  CaptureTest\CaptureTest.ui
     文件       11813  2017-07-03 09:36  CaptureTest\CaptureTest.vcxproj
     文件        3448  2017-07-03 09:36  CaptureTest\CaptureTest.vcxproj.filters
     文件         629  2017-07-03 09:36  CaptureTest\CaptureTest.vcxproj.user
     目录           0  2017-07-03 09:36  CaptureTest\GeneratedFiles\
     目录           0  2017-07-03 09:36  CaptureTest\GeneratedFiles\Debug\
     文件        4341  2017-07-03 09:36  CaptureTest\GeneratedFiles\Debug\moc_capturescreen.cpp
     文件        3640  2017-07-03 09:50  CaptureTest\GeneratedFiles\Debug\moc_CaptureTest.cpp
     文件        1420  2017-07-03 09:36  CaptureTest\GeneratedFiles\qrc_CaptureTest.cpp
     目录           0  2017-07-03 09:35  CaptureTest\GeneratedFiles\Release\
     文件        1931  2017-07-03 09:40  CaptureTest\GeneratedFiles\ui_CaptureTest.h
     文件         181  2017-07-03 09:35  CaptureTest\main.cpp
     目录           0  2017-07-03 09:34  CaptureTest\Resources\
     目录           0  2017-07-03 09:36  CaptureTest\x64\
     目录           0  2017-07-03 09:41  CaptureTest\x64\Debug\
     文件      149050  2017-07-03 09:36  CaptureTest\x64\Debug\capturescreen.obj
     文件         277  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.log
     文件      156931  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.obj
     目录           0  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\
     文件         190  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\CaptureTest.lastbuildstate
     文件        7154  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\CL.command.1.tlog
     文件      120398  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\CL.read.1.tlog
     文件        3934  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\CL.write.1.tlog
     文件        2978  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\custombuild.command.1.tlog
     文件         702  2017-07-03 09:50  CaptureTest\x64\Debug\CaptureTest.tlog\custombuild.read.1.tlog
............此处省略9个文件信息

评论

共有 条评论