QT自定义控件——HSV色环

在Qt Widget中绘制 HSV色环
HSV颜色模型(Hue, Saturation, Value),色调(H),饱和度(S),明度(V)

在这里插入图片描述

class qtColorWheel : public QWidget
{
    Q_OBJECT

public:
    qtColorWheel(QWidget *parent = nullptr);
protected:
    void paintEvent(QPaintEvent* event) override;
    
	int m_margin = 5;
};
struct Polar {
    qreal radius;
    qreal angle;
};
Polar cartesianToPolar(qreal x, qreal y)
{
    qreal theta = atan2( x,y); 
    if (theta < 0) {
        theta += (2 * M_PI);
	}
	qreal r = qSqrt((x * x) + (y * y));
	Polar p;
	p.angle = theta;
 	p.radius = r;
 	return p;
}
void qtColorWheel::paintEvent(QPaintEvent * event)
{
    QPainter painter;
    painter.begin(this);
    QPen pen;
	pen.setWidth(1);
	auto min = qMin(width(), height()) - m_margin * 2;
	auto center = QPointF(width() / 2.0, height() / 2.0);
	auto offset = center - QPointF(min / 2.0, min / 2.0);
	auto r = min / 2.0;
	for (int w = 0; w <= min; w++) {
    	int a = w - r;
    	for (int h = 0; h <= min; h++) {
    		int b = r - h;
    		Polar p = cartesianToPolar(a, b);
    		if (p.radius <= r) {
    			qreal hue = p.angle / (2 * M_PI);
    			qreal sat = p.radius / r;
    			QColor color;
				color.setHsvF(hue, sat, 1.0);
				pen.setColor(color);
				painter.setPen(pen);
				painter.drawPoint(QPointF(w, h) + offset);
			}
		}
	}
	painter.end();
}

参考资料
https://stackoverflow.com/questions/59157309/drawing-an-hsv-color-wheel-in-qt-c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值