资源简介
一个简单的小例子来看一看如何用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个文件信息
相关资源
- PyQt4入门指南 PDF中文版
- Qt常用图标资源png
- qt下图片循环显示的几个很好的,包括
- QT将应用程序缩小到右下角任务栏的系
- Qt creator 做的计算器工程文件
- 北邮嵌入式实验_MQTT协议实验过程及代
- Qt类继承关系图
- Qt4迁移至Qt5完全指南
- 基于QT局域网聊天系统毕业论文
- qtcreator + Keil MDK armcc +openocd 编译 调试
- 实现了异常管理流程QtSharpCore.zip
- 4412开发板linux-QT下使用wfi设置
- Qt中文语言包丨PyQt5汉化包附汉化说明
- QTP百度云盘连接.txt
- 截图并让图片显示最前面
- qt编程下实现点击按钮调用外部程序
- cyusb-mingw-lib.rar
- qtopia下的简易pda应用程序
- 基于QT 点菜系统客户端程序
- Qt Office 集成
- 4G通过MQTT协议ONENET
- 水稻抽穗期QTL DTH2的图位克隆和功能分
- 水稻耐盐萌发能力的遗传分析和QTL定
- 水稻籽粒硒含量的QTL定位及遗传分析
- 利用籼粳亚种片段代换系对花粉半不
- 基于单片段代换系的水稻穗长QTL加性
- 利用染色体单片段代换系定位水稻结
- qt colorbar控件
- 科学+程序员计算器
- MT2503/6261等平台MQTT实现代码
评论
共有 条评论