代码之家  ›  专栏  ›  技术社区  ›  Rubina

如何在代码中使用qt-qcolormap?

  •  0
  • Rubina  · 技术社区  · 7 年前

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

    我查看了qt qcolormap,但是没有得到足够的信息来编码它。如果有人知道怎么做。请共享代码段。

    1 回复  |  直到 7 年前
        1
  •  3
  •   shrpq    7 年前

    更多的是关于颜色模型的问题,而不是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 .