Qt小项目(4):绘制色轮

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/artanis23/article/details/52225078

绘制色轮这个项目是Qt学习绘制图形的小综合。这是个不仅更加复杂,而且更实用。
所谓色轮,其实就是一个带有很多颜色的圆盘(或许你没听说过这个名字,但是你肯定见过这个东西)。

先给大家展示一下运行结果:
Qt小项目(4):绘制色轮_第1张图片

我们先看看代码

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);
}

你可能感兴趣的:(Qt,--Qt小项目)