原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/artanis23/article/details/52225078
绘制色轮这个项目是Qt学习绘制图形的小综合。这是个不仅更加复杂,而且更实用。
所谓色轮,其实就是一个带有很多颜色的圆盘(或许你没听说过这个名字,但是你肯定见过这个东西)。
我们先看看代码
void ColorWheel::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
const int r = 150;
QConicalGradient conicalGradient(0, 0, 0);
conicalGradient.setColorAt(0.0, Qt::red);
conicalGradient.setColorAt(60.0/360.0, Qt::yellow);
conicalGradient.setColorAt(120.0/360.0, Qt::green);
conicalGradient.setColorAt(180.0/360.0, Qt::cyan);
conicalGradient.setColorAt(240.0/360.0, Qt::blue);
conicalGradient.setColorAt(300.0/360.0, Qt::magenta);
conicalGradient.setColorAt(1.0, Qt::red);
painter.translate(r, r);
QBrush brush(conicalGradient);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
painter.drawEllipse(QPoint(0, 0), r, r);
}
首先我们把半径定为150,并开启反走样(即是抗锯齿),
painter.setRenderHint(QPainter::Antialiasing);
const int r = 150;
接下来我们再来看看QConicalGradient构造函数的原型。
QConicalGradient::QConicalGradient ( qreal cx, qreal cy, qreal angle )
cx,cy表示角度渐变中心点的x,y坐标,angle表示起始角度。
因此项目里把三个参数都设为0。
接下来看setColorAt函数,它接受两个参数,一个是角度比例,一个是颜色。
例如说:
conicalGradient.setColorAt(60.0/360.0, Qt::yellow);
这即为将60度角设为黄色,由于圆周角为360度,因此60.0/360.0即为角度比例。而在小数点后加零的原因是让计算出的结果是浮点数而不是整数。
painter.translate(r, r);
translate(x,y)的意思是把平面直角坐标系的原点设置到了坐标为(x,y)的点上。
完整代码如下:
ColorWheel.h
#ifndef COLORWHEEL_H
#define COLORWHEEL_H
#include
#include
class ColorWheel : public QWidget
{
Q_OBJECT
public:
ColorWheel(QWidget *parent = 0);
~ColorWheel();
protected:
void paintEvent(QPaintEvent *);
};
#endif // COLORWHEEL_H
ColorWheel.cpp
#include "colorwheel.h"
ColorWheel::ColorWheel(QWidget *parent)
: QWidget(parent)
{
}
ColorWheel::~ColorWheel()
{
}
void ColorWheel::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
const int r = 150;
QConicalGradient conicalGradient(0, 0, 0);
conicalGradient.setColorAt(0.0, Qt::red);
conicalGradient.setColorAt(60.0/360.0, Qt::yellow);
conicalGradient.setColorAt(120.0/360.0, Qt::green);
conicalGradient.setColorAt(180.0/360.0, Qt::cyan);
conicalGradient.setColorAt(240.0/360.0, Qt::blue);
conicalGradient.setColorAt(300.0/360.0, Qt::magenta);
conicalGradient.setColorAt(1.0, Qt::red);
painter.translate(r, r);
QBrush brush(conicalGradient);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
painter.drawEllipse(QPoint(0, 0), r, r);
}