渐变-QLinearGradient,QRadialGradient,QConicalGradient)
2014-03-08 17:14
351 查看
QT:渐变
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient),如下图所示:
从左到右依次为:线性渐变、辐射渐变、角度渐变
下面来看一下实现的代码,由于程序较简单,所以将解释都加在了每行代码的后边:
[cpp] view
plaincopy
#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);
}
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient),如下图所示:
从左到右依次为:线性渐变、辐射渐变、角度渐变
下面来看一下实现的代码,由于程序较简单,所以将解释都加在了每行代码的后边:
[cpp] view
plaincopy
#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);
}
相关文章推荐
- 线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- pyqt4文档阅读(9.2):QLinearGradient-QRadialGradient-QConicalGradient
- linear-gradient()图像渐变属性详解
- Android开发小技巧之对android颜色渐变(Gradient )的改进
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
- 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
- Android Shape资源文件gradient颜色渐变方向
- Android开发之渐变效果gradient属性
- CSS实现兼容性的渐变背景(gradient)效果
- Qt5.9中线性渐变QLinearGradient类,辐射渐变QRadialGradient类,锥形渐变QConicalGradient类用法
- 使用SVG实现gradient背景渐变
- CSS渐变之CSS3 gradient在Firefox3.6下的使用
- HTML5的渐变色 渐变的两种类型 createLinearGradient 和createRadialGradient
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)