现在的位置: 首页 > 综合 > 正文

QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)

2013年06月02日 ⁄ 综合 ⁄ 共 2856字 ⁄ 字号 评论关闭

QT:渐变

渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient),如下图所示:

从左到右依次为:线性渐变、辐射渐变、角度渐变

下面来看一下实现的代码,由于程序较简单,所以将解释都加在了每行代码的后边:

  

#include<QtGui/QApplication>
#include"gradient_test.h"
intmain(intargc,char*argv[])
{
    QApplicationa(argc,argv);
    gradient_testw;
    w.show();
    returna.exec();
}
//gradient_test.h:
#ifndefGRADIENT_TEST_H
#defineGRADIENT_TEST_H
#include<QtGui/QWidget>
#include<QPainter>
#include<QStyleOption>
#include<QResizeEvent>
classgradient_test:publicQWidget
{
    Q_OBJECT
public:
    explicitgradient_test(QWidget*parent=0);
    virtualQSizesizeHint()const;
protected:
    voidpaintEvent(QPaintEvent*event);
    voidresizeEvent(QResizeEvent*event);
private:
    QSizeinitSize;
    QImagewheel;
    voiddrawLine(constQSize&newSize);
};
#endif//GRADIENT_TEST_H
 
 
//gradient_test.cpp:
#include"gradient_test.h"
gradient_test::gradient_test(QWidget*parent)
    :QWidget(parent),initSize(300,300)
{
    resize(650,250);    //窗口大小
}
voidgradient_test::drawLine(constQSize&newSize)
{
    QPainterpainter(&wheel);   //wheel作为画图对象?
    painter.setRenderHint(QPainter::Antialiasing);  //消除锯齿
    wheel.fill(Qt::white);
    //线性渐变
    QLinearGradientlinearGradient(20,20,150,150);
    //创建了一个QLinearGradient对象实例,参数为起点和终点坐标,可作为颜色渐变的方向
    //painter.setPen(Qt::NoPen);
    linearGradient.setColorAt(0.0,Qt::green);
    linearGradient.setColorAt(0.2,Qt::white);
    linearGradient.setColorAt(0.4,Qt::blue);
    linearGradient.setColorAt(0.6,Qt::red);
    linearGradient.setColorAt(1.0,Qt::yellow);
    painter.setBrush(QBrush(linearGradient));
painter.drawEllipse(10,10,200,200);   
//前面为左边,后面两个参数为横轴和纵轴,上面的四行分别设置渐变的颜色和路径比例
 
    //辐射渐变
    QRadialGradientradialGradient(310,110,100,310,110);
    //创建了一个QRadialGradient对象实例,参数分别为中心坐标,半径长度和焦点坐标,如果需要对称那么中心坐标和焦点坐标要一致
    radialGradient.setColorAt(0,Qt::green);
    //radialGradient.setColorAt(0.2,Qt::white);
    radialGradient.setColorAt(0.4,Qt::blue);
    //radialGradient.setColorAt(0.6,Qt::red);
    radialGradient.setColorAt(1.0,Qt::yellow);
    painter.setBrush(QBrush(radialGradient));
    painter.drawEllipse(210,10,200,200);//在相应的坐标画出来
    //弧度渐变
    QConicalGradientconicalGradient(510,110,0);
    //创建了一个QConicalGradient对象实例,参数分别为中心坐标和初始角度
    conicalGradient.setColorAt(0,Qt::green);
    conicalGradient.setColorAt(0.2,Qt::white);
    conicalGradient.setColorAt(0.4,Qt::blue);
    conicalGradient.setColorAt(0.6,Qt::red);
    conicalGradient.setColorAt(0.8,Qt::yellow);
conicalGradient.setColorAt(1.0,Qt::green);
//设置渐变的颜色和路径比例
    painter.setBrush(QBrush(conicalGradient));
    painter.drawEllipse(410,10,200,200);//在相应的坐标画出来
}
QSizegradient_test::sizeHint()const
{
    returnQSize(height(),height());
}
voidgradient_test::resizeEvent(QResizeEvent*event)
{
    wheel=QImage(event->size(),QImage::Format_ARGB32_Premultiplied);
    wheel.fill(palette().background().color());
    drawLine(event->size());
    update();
}
voidgradient_test::paintEvent(QPaintEvent*event)
{
    QPainterpainter(this);
    QStyleOptionopt;
    opt.init(this);
    painter.drawImage(0,0,wheel);
    style()->drawPrimitive(QStyle::PE_Widget,&opt,&painter,this);
}

 

 

抱歉!评论已关闭.