資源簡介
一個簡單的小例子來看一看如何用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個文件信息
評論
共有 條評論