首页 > 信息 >

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

发表时间:2023-03-22 21:13:14 来源:QT教程

概述

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


(资料图)

先看效果:

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

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

快捷键操作:

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类型。

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

标签:

Copyright ©  2015-2022 西南产业网版权所有  备案号:皖ICP备2022009963号-8   联系邮箱:39 60 29 14 2@qq.com