线性渐变、辐射渐变、角度渐变-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 ...
随机推荐
- 在windows下远程访问linux服务器
在网络性能.安全性.可管理性上,Linux有着其他系统无法比拟的强大优势,而服务器对这些方面要求特别高,因此Linux常常被用来做服务器使用.而当我们需要维护linux服务器的时候,就需要远程访问li ...
- mysql查询字段所在表
use information_schema;select * from columns where column_name='字段名' ;
- com.octo.captcha.service.CaptchaServiceException: Invalid ID, could not validate unexisting o
<p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;"& ...
- ajax跳转到新的jsp页面(局部刷新)
ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹 ...
- [转] Valgrind使用
http://www.cnblogs.com/napoleon_liu/articles/2001802.html 调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www. ...
- js如何实现点击显示和隐藏表格
js如何实现点击显示和隐藏表格 一.总结 一句话总结: 1.给table或者table里面的元素添加点击事件, 2.然后判断当前表格的数据显示或者隐藏, 3.然后通过display属性显示(非none ...
- BigDecimal 舍入模式(Rounding mode)介绍
BigDecimal 舍入模式(Rounding mode)介绍 什么样的经历,才能领悟成为架构师? >>> 1 RoundingMode介绍 package java.math ...
- js实现去文本换行符小工具
js实现去文本换行符小工具 一.总结 一句话总结: 1.vertical属性使用的时候注意看清定义,也注意父元素的基准线问题.vertical-align:top; 2.获取textareaEleme ...
- 【u222】选课
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 黄黄游历完学校,就开始要选课上了. 黄黄同学所在的学校有一个奇怪的上课系统,有N种课可以选择,每种课可 ...
- 建立一个OTP应用
http://www.javaeye.com/topic/374167 以下是在erlang项目开发中的一些记录,即包含很多通俗易懂的原则,也包含一些似是而非的建议,比较混乱,还没有积累到一个可以分门 ...