线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。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);
 - }
 
http://blog.csdn.net/wangwei890702/article/details/8552482
线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient的更多相关文章
- CSS3背景渐变属性 linear-gradient(线性渐变)和radial-gradient(径向渐变)
		
CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). 为了更好的应用CSS3 Gradient,我们需要先了解一下目前的几种现代浏览器 ...
 - css3实现背景颜色渐变,文字颜色渐变,边框颜色渐变
		
css3的渐变可以使用2个或者多个指定的颜色之间显示平稳的过渡的效果.这篇文章主要介绍下css3实现背景颜色渐变,文字颜色渐变,边框颜色渐变的方法,以便大家学习参考! 1.css背景颜色渐变 代码: ...
 - 30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient
		
渐变有三种:QLinearGradient.QConicalGradient . QRadialGradient 它们都有一个QGradient父类 QGradient父类的常用公共函数有: void ...
 - echarts 角度渐变环形图心得
		
今天做了一个图,把自己的遇到的问题和体会记录一下,以防忘记 echarts地址 https://gallery.echartsjs.com/editor.html?c=xEPtLLmG4G 参考官网地 ...
 - H5C3--线性渐变 linear-gradient,径向渐变radial-gradient,重复渐变radial-gradient
		
一.线性渐变 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
 - CSS3 颜色渐变、阴影、渐变的阴影
		
css阴影: 外阴影:box-shadow:X Y Npx #color; 内阴影:box-shadow:inset X Y Npx #color; 文字阴影:text-shadow:X Y Npx ...
 - 第四界css大会  黑魔法-css网格背景、颜色拾取器、遮罩、文字颜色渐变、标题溢出渐变等
		
1.css网格背景 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
 - 最简单的PS渐变导入方法 photoshop渐变插件素材导入教程
		
photoshop渐变插件素材可以让用户更好更直接,更快速地设计出自己想要的效果作品.网上有多种多样的ps渐变,那么Mac版Ps渐变怎么导入呢?这里我来和大家分享一下photoshop渐变插件素材导入 ...
 - c# 自定义按钮,渐变颜色(含中心向四周渐变,单方向渐变)
		
废话不多言,直接代码: public class RoundButton : Button { bool clickBool = false; //1.设置圆形 //2.设置渐变色 //3.设置too ...
 
随机推荐
- java生成6位随机数
			
生成6位随机数(不会是5位或者7位,仅只有6位): System.out.println((int)((Math.random()*9+1)*100000)); 同理,生成5位随机数: System. ...
 - [SCSS] Organize Styles with SCSS Nesting and the Parent Selector
			
SCSS nesting can produce DRYer code by targeting child elements without having to write the parent c ...
 - 【codeforces 755D】PolandBall and Polygon
			
time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
 - Java中sleep()与wait()区别
			
学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别一下: 1.每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块.sleep() ...
 - JAVA基本数据类型及其转换
			
Java语言是一种强类型语言.这意味着每个变量都必须有一个声明好的类型.Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型.Java另外还提供大数字对 ...
 - HDOJ 1261 字串数
			
JAVA大数.... 字串数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
 - C#生成二维码,把二维码图片放入Excel中
			
/// <summary> /// 把图片保存到excel中 /// </summary> /// <param name="excelFilePath&quo ...
 - 【t012】整理书架
			
Time Limit: 1 second Memory Limit: 32 MB [问题描述] 小明是一个非常喜欢读书的孩子,他有一个特别的书架,书架上摆放着他买的新书.当他决定要阅读某本图书时,他就 ...
 - RedisMQ
			
RedisMQ 本次和大家分享的是RedisMQ队列的用法,前两篇文章队列工厂之(MSMQ)和队列工厂之RabbitMQ分别简单介绍对应队列环境的搭建和常用方法的使用,加上本篇分享的RedisMQ那么 ...
 - Android 平台下Cordova 调用Activity插件开发
			
首先建立一个包名为package com.JiajiaCy.CallActivity; package com.JajaCy.CallActivity; import org.apache.cordo ...