如何在代码中使用Qt QColormap?

时间:2018-05-30 19:01:54

标签: qt c++11 qt5 qwidget

我想实现这样的目标。
 Color chart

我查看了Qt QColormap,但我没有获得足够的信息来编码。如果有人知道如何做到这一点。请分享代码段。

1 个答案:

答案 0 :(得分:3)

这是关于颜色模型的更多问题然后Qt真的,但基本上你试图围绕HSL color model的边缘做一个完整的圆,同时保持饱和。

要在Qt中制作类似的东西,你会使用渐变画笔;因为我们想要连续混合使用QLinearGradient。如果你看上面的色轮,你会发现红色是0度,绿色是120度,蓝色是240度。 QLinearGradient的工作范围为0-1,因此它将分别转换为0,1 / 3,2 / 3。我们还需要添加最终停止,这将完成渐变回红色。

我添加了一些alpha通道来保持色调,这样你就可以试验一下;最终代码看起来像这样:

class ColorScale : public QWidget {
    Q_OBJECT
public:
    using QWidget::QWidget;

protected:
    void paintEvent(QPaintEvent *event) override {
        QPainter painter(this);
        painter.setOpacity(0.9);
        painter.setRenderHint(QPainter::HighQualityAntialiasing);
        QLinearGradient gradient(0, 0, 0, height());
        QGradientStops stops;
        stops << QGradientStop(0, Qt::red);
        stops << QGradientStop(1.0/3, Qt::blue);
        stops << QGradientStop(2.0/3, Qt::green);
        stops << QGradientStop(1, Qt::red);

        gradient.setStops(stops);

        painter.fillRect(rect(), gradient);
    }
};

它产生了这个:

Color scale

您可以致电QPainter::drawText来添加标签。