如何在代码中使用 Qt QColormap?
How to use Qt QColormap in code?
我想实现这样的目标。
我查看了 Qt QColormap,但没有获得足够的信息来对其进行编码。如果有人知道如何做到这一点。请分享代码片段。
更多的是关于颜色模型的问题,然后是 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);
}
};
它产生这个:
您可以通过调用 QPainter::drawText 添加标签。
我想实现这样的目标。
我查看了 Qt QColormap,但没有获得足够的信息来对其进行编码。如果有人知道如何做到这一点。请分享代码片段。
更多的是关于颜色模型的问题,然后是 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);
}
};
它产生这个:
您可以通过调用 QPainter::drawText 添加标签。