2026/1/15 13:24:26
网站建设
项目流程
自贡企业网站建设,模板下载免费,巴彦淖尔市网站建设,网络建设公司有哪些Qt实现的一个截屏#xff0c;并且可画线、画矩形、画圆、进行编辑#xff0c;保存。
使用了开源的Qt全局热键#xff0c;主要使用QxtGlobalShortcut类文件实现的。
源码#xff1a;
使用Qt5.6.1_MinGW编译通过。c.29最近在研究 Qt 开发#xff0c;实现了一个超有趣的截屏小…Qt实现的一个截屏并且可画线、画矩形、画圆、进行编辑保存。 使用了开源的Qt全局热键主要使用QxtGlobalShortcut类文件实现的。 源码 使用Qt5.6.1_MinGW编译通过。 c.29最近在研究 Qt 开发实现了一个超有趣的截屏小工具不仅能截屏还能在截屏上进行画线、画矩形、画圆以及编辑操作最后还能保存非常实用。而且用到了开源的 Qt 全局热键主要借助 QxtGlobalShortcut 类文件来达成这一酷炫功能。源码基于 Qt5.6.1_MinGW 编译通过。实现思路截屏功能通过获取屏幕设备上下文将屏幕内容绘制到一个 QPixmap 上这样就实现了截屏。QPixmap captureScreen() { QPixmap pixmap QPixmap::grabWindow(QApplication::desktop()-winId()); return pixmap; }这段代码很简洁QPixmap::grabWindow(QApplication::desktop()-winId())直接抓取了整个桌面窗口的内容并返回一个 QPixmap 对象这个对象就代表了截取的屏幕图像。绘图操作利用 QPainter 类来实现画线、画矩形、画圆等操作。以画直线为例void drawLine(QPixmap pixmap, QPoint start, QPoint end) { QPainter painter(pixmap); painter.setPen(QPen(Qt::red, 2)); painter.drawLine(start, end); }这里创建了一个 QPainter 对象传入要绘制的 QPixmap。设置画笔为红色宽度为 2然后调用drawLine方法从起始点start画到终点end。画矩形和画圆的操作类似只是调用不同的QPainter方法比如画矩形用drawRect画圆用drawEllipse。编辑功能可以对绘制的图形进行移动、删除等编辑。这部分实现稍微复杂点需要记录每个图形的属性和位置等信息。比如为了移动一个矩形我们需要重新计算它的左上角顶点位置然后重新绘制。保存功能使用QPixmap的save方法将编辑后的图片保存到指定路径。void savePixmap(const QPixmap pixmap, const QString path) { pixmap.save(path); }这里传入要保存的QPixmap和保存路径pathsave方法会自动根据路径的文件后缀选择合适的图片格式进行保存。Qt 全局热键的使用这部分借助了 QxtGlobalShortcut 类文件。首先要引入相关头文件#include qxtglobalshortcut.h然后在代码中创建一个全局热键实例比如设置截屏的热键为Ctrl Shift SQxtGlobalShortcut *shortcut new QxtGlobalShortcut(QKeySequence(Qt::CTRL Qt::SHIFT Qt::Key_S), this); connect(shortcut, SIGNAL(activated()), this, SLOT(takeScreenshot()));这里创建了一个QxtGlobalShortcut对象指定了热键组合Ctrl Shift S并连接了activated信号到takeScreenshot槽函数当按下这个热键组合时就会触发截屏操作。总的来说通过这些功能的组合打造出了一个功能齐全的截屏工具。希望这篇博文能给同样在研究 Qt 开发的小伙伴一些启发。