0
点赞
收藏
分享

微信扫一扫

Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)


概述

windows平台,使用Qt Widget实现一个简易截图工具,支持选区角落拖动缩放、选区移动,支持保存,复制到粘贴板,支持快捷键调出截图、退出截图。暂不支持对截图进行编辑操作,以及鼠标移动到程序窗口可以自动识别,后去有需求可以加上。

先看效果:

Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)_sed


Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)_sed_02

选区后会弹出三个按钮,从左到右分别是:退出、保存到文件、复制到粘贴板。如果选择复制到粘贴板,就可以直接在其他地方进行粘贴截图。


Qt实现一个简易截图工具(支持缩放、移动、保存、复制到粘贴板)_Qt截图工具_03

当鼠标在选区上下左右四个角落按下后会出现操作选区,此时拖动鼠标可以改变选区大小。 选区左上角可以实时显示选区的尺寸。

快捷键操作:
Alt+A : 开始截图
Esc:退出截图

正文

截图部分关键代码,使用windows接口实现

int width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);

// 获取窗口的设备上下文(Device Contexts)
HDC hdcWindow = GetDC(GetDesktopWindow()); // 要截图的窗口句柄,为空则全屏
// 获取设备相关信息的尺寸大小
int nBitPerPixel = GetDeviceCaps(hdcWindow, BITSPIXEL);
CImage image;
image.Create(width, height, nBitPerPixel);
BitBlt(image.GetDC(), // 保存到的目标 图片对象 上下文
0, 0, // 起始 x, y 坐标
width, height, // 截图宽高
hdcWindow, // 截取对象的 上下文句柄
0,0,
/*m_pParentView->x(), m_pParentView->y(),*/ // 指定源矩形区域左上角的 X, y 逻辑坐标
SRCCOPY
);
// 释放 DC句柄
ReleaseDC(nullptr, hdcWindow);
// 释放图片上下文
image.ReleaseDC();
WCHAR wfile[256];
memset(wfile,0, sizeof(wfile));
tempSavePath.toWCharArray(wfile);
HRESULT result = image.Save(wfile, Gdiplus::ImageFormatPNG);
QImage shot = cutImage(rect, QImage(tempSavePath));
if (bSave)
{
bool bResult = shot.save(savePath, "png");
}

将图片数据复制到系统粘贴板中:

QMimeData * mimeData = new QMimeData;
mimeData->setImageData(shot);
qApp->clipboard()->setMimeData(mimeData);

注:shot是QImage类型。


举报

相关推荐

0 条评论