美文网首页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