资源简介
一个简单的小例子来看一看如何用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
- 上一篇:Qt 之 HTTP 请求支持断点续传
- 下一篇:Qt 之 实现简单截图功能二
相关资源
- Qt 之 实现简单截图功能二
- Qt 之 HTTP 请求支持断点续传
- PyQt5 tutorial PyQt5教程英文版
- qtsoap-2.7_1
- linux Qt局域网聊天
- Qt 多线程及简单 demo
- Qt实现的FlatUI样式
- Qt编写视频监控画面分割界面
- QT5线程QThread使用
- 基于Qt的声波图形界面动态绘制
- Qt单机斗地主
- 智能小车QT远程客户端
- 视频小车QT客户端
- qt实现n皇后问题带界面
- QRGenerator.zip
- WidgetTimeline.zip
- 深思EliteIV锁数据的截取工具
- linux下的设计QT计算器
- 数值计算方法上机实验报告完全版亲
- Qt自定义QLabel滚动显示文本文字,la
- 用Qt编写的具有人机对战的五子棋
- zw_QT读数据绘制曲线.zip
- arcgis for js 4.5 仿qq截图 地图截屏
- qt实现串口读取GPS信息
- Qt带进度条的启动界面
- 用QT编写的五子棋游戏
- QT TCP Socket 通信
- 输入字符串自动转换二维码,并打印
- Qt自定义鼠标点击样式
- paho.mqtt.c-1.3.1
评论
共有 条评论