概述
顾名思义,就是通过鼠标从屏幕获取颜色值,不管是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);
网友评论