渐变有三种:QLinearGradient、QConicalGradient 、 QRadialGradient

它们都有一个QGradient父类

QGradient父类的常用公共函数有:

  1. void QGradient::setSpread ( Spread method );
  2. //设置填充梯度区域外的区域,参数有:
  3. // QGradient::PadSpread :填充区域内最接近的停止颜色。这是默认的。
  4. // QGradient::RepeatSpread : 在区域外继续重复填充
  5. // QGradient::ReflectSpread : 在区域外反射填充
  6.  
  7. QGradient::setCoordinateMode ( CoordinateMode mode );
  8. //设置渐变的坐标模式,比如QGradient::LogicalMode设置坐标为逻辑坐标(默认为该值)
  9.  
  10. void setColorAt ( qreal position, const QColor & color );
  11. //设置梯度颜色, position处于0~1之间

QLinearGradient线性渐变

构造函数函数如下:

  1. QLinearGradient ( qreal x1, qreal y1, qreal x2, qreal y2 )
  2. //其中x1,y1表示渐变起始坐标, x2,y2表示渐变终点坐标
  3. //如果只有x相等,则表示垂直线性渐变,如果只有y相等,则表示平行线性渐变,否则就是斜角线性渐变

示例1-垂直渐变:

  1. void Widget::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. painter.setRenderHint(QPainter::Antialiasing,true);
  5. QLinearGradient Linear(,,,); //垂直渐变
  6.  
  7. Linear.setColorAt(,Qt::red);
  8. Linear.setColorAt(,Qt::blue);
  9.  
  10. painter.setBrush(Linear);
  11. painter.setPen(Qt::transparent);
  12. painter.drawRect(,,,); //100,100 到200,200
  13. }

示例2-水平渐变

  1. void Widget::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. painter.setRenderHint(QPainter::Antialiasing,true);
  5. QLinearGradient Linear(,,,); //水平渐变
  6.  
  7. Linear.setColorAt(,Qt::red);
  8. Linear.setColorAt(,Qt::blue);
  9. painter.setBrush(Linear);
  10. painter.setPen(Qt::transparent);
  11. painter.drawRect(,,,); //100,100 到200,200
  12. }

QradialGradient半径渐变

更据圆的半径来设定不同的颜色

构造函数函数如下:

  1. QRadialGradient ( qreal cx, qreal cy, qreal radius, qreal fx, qreal fy );
  2. // cx cy : 设置圆的中心原点(center)
  3. // radius:设置圆半径
  4. //fx fy : 设置焦点focus,也就是颜色的起始位置

示例1:

  1. void Widget::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. painter.setRenderHint(QPainter::Antialiasing,true);
  5. painter.translate(width()/,height()/);
  6. QRadialGradient Radial(,,,,); //设置圆的原点和焦点在中心,半径120
  7.  
  8. Radial.setColorAt(,Qt::red);
  9. Radial.setColorAt(0.5,Qt::blue); //设置50%处的半径为蓝色
  10. Radial.setColorAt(,Qt::green);
  11.  
  12. painter.setPen(Qt::transparent);
  13. painter.setBrush(Radial);
  14. painter.drawEllipse(-,-,,);
  15. }

示例2:

  1. void Widget::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. painter.setRenderHint(QPainter::Antialiasing,true);
  5. painter.translate(width()/,height()/);
  6. QRadialGradient Radial(,,,,); //设置焦点在(0,60),半径120
  7.  
  8. Radial.setColorAt(,Qt::red);
  9. Radial.setColorAt(0.5,Qt::blue);
  10. Radial.setColorAt(,Qt::green);
  11.  
  12. painter.setPen(Qt::transparent);
  13. painter.setBrush(Radial);
  14. painter.drawEllipse(-,-,,);
  15. }

QConicalGradient圆锥渐变

构造函数如下所示:

  1. QConicalGradient ( qreal cx, qreal cy, qreal angle );
  2. //设置(cx,cy)位置为圆锥尖,设置angle角度为起始颜色位置(逆时针渐变)

示例:

  1. void Widget::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. painter.setRenderHint(QPainter::Antialiasing,true);
  5. painter.translate(width()/,height()/);
  6.  
  7. QConicalGradient Conical(,,); //设置点在中心,角度为30
  8. Conical.setColorAt(,Qt::red);
  9. Conical.setColorAt(0.5,Qt::blue);
  10. Conical.setColorAt(,Qt::green);
  11.  
  12. painter.setPen(Qt::transparent);
  13. painter.setBrush(Conical);
  14. painter.drawEllipse(-,-,,);
  15. }

未完,下章来学习:

31.QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待

30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient的更多相关文章

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

    http://blog.csdn.net/wangwei890702/article/details/8552482 QT:渐变 渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象.Qt提供了一 ...

  2. 线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient

    渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象.Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,分别是线性渐变(QLinearGradient).辐射渐变(QRadia ...

  3. 30.QT IDE编写

    mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTe ...

  4. Qt 学习之路 2(27):渐变

    Qt 学习之路 2(27):渐变 豆子 2012年11月20日 Qt 学习之路 2 17条评论 渐变是绘图中很常见的一种功能,简单来说就是可以把几种颜色混合在一起,让它们能够自然地过渡,而不是一下子变 ...

  5. Qt之图形(渐变填充)

    简述 QGradient可以和QBrush组合使用,来指定渐变填充. Qt目前支持三种类型的渐变填充: QLinearGradient:显示从起点到终点的渐变. QRadialGradient:以圆心 ...

  6. qt画刷和画笔

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #画刷和画笔:QBrush 定义了 QPainter 的填充模式,具 ...

  7. Qt4.7文档翻译:Qt样式单参考,Qt Style Sheets Reference(超长,超全)

    内容目录 Qt样式单参考 可进行样式设置的部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt样式单参考 Qt样式单支持各种属性.伪状态和子控件,这样使得妳能够自行设计部件的外观. ...

  8. QT 二维图形 原理、发展及应用

    转载自 网易博客:sun的博客 http://zhouyang340.blog.163.com/blog/static/3024095920126710504178/ 2D绘图 Qt4中的2D绘图部分 ...

  9. Qt如何绘制(简单深刻,fearlazy的系列文章)

    我觉得绘制只需要考虑几个问题.简单地说就是谁在什么地方画什么? 在Qt中可以这么回答:QPainter在QPainterDevice中画想画的东西. 举个例子:用QtCreator向导新建一个项目,基 ...

随机推荐

  1. Java记事本编写第一个程序“你好,世界”

  2. Educational Codeforces Round 25

    A 题意:给你一个01的字符串,0是个分界点,0把这个字符串分成(0的个数+1)个部分,分别求出这几部分1的个数.例如110011101 输出2031,100输出100,1001输出101 代码: # ...

  3. Java编程题(1):n个数里出现次数大于等于n/2的数

    题目描述:输入n个整数,输出出现次数大于等于数组长度一半的数. 输入描述:每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2. 输出描述:输出出现次数大于等 ...

  4. mysql兼容emoji表情存取

    emoji介绍 Emoji (絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是字符)是一套起源于日本的12x12像素表情符号,由栗田穣崇(Shigetaka Kurit)创作,最早在 ...

  5. 为什么需要提前撰写Spec文档

    Joel on Software(中文名叫<Joel软件随想录>)算得上是一本旧书了,但里面的建议和讨论,真的是历久弥新.特别是,Joel是个有趣.牛逼的家伙:前微软Excel的职员.St ...

  6. Android 视频播放器 (一):使用VideoView播放视频

    一.简介 作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的. 下面简单介绍一下VideoView: VideoView是使用MediaP ...

  7. Python面向对象5:类的常用魔术方法

    魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...

  8. Inotify+Rsync实现Linux服务器文件同步

    做这个功能的时候遇到了好多坑,在此感谢一下这篇博客 http://kerry.blog.51cto.com/172631/734087/  ,大家参照这篇博客就能实现该功能. 另外如果想详细了解一下的 ...

  9. LabVIEW(八):程序结构中的循环结构

    1.程序结构分为三种:循环结构.分支结构.顺序结构. 本文主要讨论循环结构. 2.While循环 左下角:循环计数端子i,从0开始计数,每进行一次循环,i自动增加1. 右下角:循环条件端子,当循环达到 ...

  10. Docker0 网卡删除

    只需执行下面三步就可以了: 1.yum -y install bridge-utils 2.       ifconfig docker0 down 3.  brctl delbr docker0 执 ...