资源简介
一个简单的小例子来看一看如何用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个文件信息
相关资源
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- E4A免ROOT截图截桌面图类库
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- 模拟网上银行截图(易语言)整蛊好
- QT酷炫界面开发指南《QmlBook》
- 代码项目“生成”微博、知乎、
- CtrlAltQ全屏截图源码
- 易语言全屏截图源码
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- 易语言高级表格滚动截图源码
评论
共有 条评论