答案 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);
}
};
它产生了这个:
您可以致电QPainter::drawText来添加标签。