美文网首页Qt学习
Qt实现拾色器

Qt实现拾色器

作者: Rekols | 来源:发表于2017-05-29 14:39 被阅读166次

概述

顾名思义,就是通过鼠标从屏幕获取颜色值,不管是rgb还是hex。

思路

首先创建一个全屏窗口,可以继承 QMainWindow或QWidget,这个窗口必须在顶层而且没有标题栏,一触发取色就截取整个屏幕画到这个窗口,当鼠标移动时显示预览(需要setMouseTracking为true),鼠标左键点击时取色。

代码实现

setWindowFlags参数:

Qt::X11BypassWindowManagerHint
Qt::WindowStaysOnTopHint
Qt::FramelessWindowHint
Qt::Tool

第一个参数意思是不显示在dock
第二个参数设置窗口为顶层

截全屏:
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());

鼠标点击左键取色,在mouseReleaseEvent事件里添加代码,下面是把QPixmap转换为QImage:
QImage image = pixmap.toImage();

获取当前鼠标坐标的颜色:
QColor color = image.pixel(QCursor::pos());

转换十六进制:
QString hex = QString("#%1%2%3").arg(color.red(), 2, 16, QLatin1Char('0')).arg(color.green(), 2, 16, QLatin1Char('0')).arg(color.blue(), 2, 16, QLatin1Char('0')).toUpper();

把颜色复制到粘贴板
QClipboard* cb = QApplication::clipboard(); cb->setText(hex);

完整代码:

https://github.com/rekols/get-color-tool

相关文章

网友评论

    本文标题:Qt实现拾色器

    本文链接:https://www.haomeiwen.com/subject/zrgkfxtx.html