简述

QGradient可以和QBrush组合使用,来指定渐变填充。

Qt目前支持三种类型的渐变填充:

  • QLinearGradient:显示从起点到终点的渐变。

  • QRadialGradient:以圆心为中心显示渐变。

  • QConicalGradient:围绕一个中心点显示渐变。

一个渐变类型可以使用type()函数来检索,类型中的每一个都是QGradient的子类。

渐变类型

QLinearGradient QRadialGradient QConicalGradient

使用QGradientStop类来描述渐变中过渡点的位置和颜色。例如:一个位置和一个颜色。使用setColorAt()函数来定义一个过渡点。或者,使用setStops()函数来一次定义多个过渡点。需要注意的是,后者的功能将替换当前设置的过渡点。

这是渐变的一套完整的过渡点(通过stops() 来访问)描述渐变区域如何被填充。如果没有指定任何过渡点,那么将会从0点-黑色渐变为1点-白色。

QLinearGradient

QLinearGradient显示从起点到终点的渐变。

效果

QGradient::PadSpread QGradient::RepeatSpread QGradient::ReflectSpread

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event); QPainter painter(this); // 反走样
painter.setRenderHint(QPainter::Antialiasing, true); // 设置渐变色
QLinearGradient linear(QPointF(80, 80), QPointF(150, 150));
linear.setColorAt(0, Qt::black);
linear.setColorAt(1, Qt::white); // 设置显示模式
linear.setSpread(QGradient::PadSpread); // 设置画笔颜色、宽度
painter.setPen(QPen(QColor(0, 160, 230), 2)); // 设置画刷填充
painter.setBrush(linear); // 绘制椭圆
painter.drawRect(QRect(40, 40, 180, 180));
}

QLinearGradient 类构造函数的第一个参数指定起点,第二个参数指定终点,然后显示渐变。成员函数setColorAt()设置起点和终点之间要显示的颜色,成员函数setSpread()可以设置起点和终点区域之外的显示模式。

QRadialGradient

QRadialGradient类以圆心为中心显示渐变。(cx, cy)是中点,半径(radius)是以中点为圆心的圆的半径,(fx, fy)是渐变的起点。

效果

QGradient::PadSpread QGradient::RepeatSpread QGradient::ReflectSpread

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event); QPainter painter(this); // 反走样
painter.setRenderHint(QPainter::Antialiasing, true); // 设置渐变色
QRadialGradient radial(110, 110, 50, 130, 130);
radial.setColorAt(0, Qt::black);
radial.setColorAt(1, Qt::white); // 设置显示模式
radial.setSpread(QGradient::ReflectSpread ); // 设置画笔颜色、宽度
painter.setPen(QPen(QColor(0, 160, 230), 2)); // 设置画刷填充
painter.setBrush(radial); // 绘制椭圆
painter.drawRect(QRect(40, 40, 180, 180));
}

QRadialGradient类构造函数的第一个参数和第二个参数是(cx, cy)坐标,第三个参数是半径,第四个和第五个参数是(fx, fy)坐标。

QConicalGradient

QConicalGradient类在(cx, cy)坐标上以角度(angle)为中心显示渐变。

效果

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event); QPainter painter(this); // 反走样
painter.setRenderHint(QPainter::Antialiasing, true); // 设置渐变色
QConicalGradient conical(110, 110, 45);
conical.setColorAt(0, Qt::black);
conical.setColorAt(1, Qt::white); // 设置画笔颜色、宽度
painter.setPen(QPen(QColor(0, 160, 230), 2)); // 设置画刷填充
painter.setBrush(conical); // 绘制椭圆
painter.drawRect(QRect(40, 40, 180, 180));
}

Qt之图形(渐变填充)的更多相关文章

  1. Qt 2D绘图 渐变填充(三种渐变方式)

    在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPai ...

  2. Qt 2D绘图之一:基本图形绘制和渐变填充

    Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...

  3. QT 基本图形绘制

    QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿       QPainter::TextAntialiasing 在可能的情况下,文 ...

  4. Qt之图形(QPainter的基本绘图)

    简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行 ...

  5. [Xcode 实际操作]二、视图与手势-(7)UIView视图的渐变填充

    目录:[Swift]Xcode实际操作 本文将演示创建一个具有渐变填充色的图形 import UIKit class ViewController: UIViewController { overri ...

  6. Canvas入门(2):图形渐变和图像形变换

    来源:http://www.ido321.com/986.html 一.图形渐变(均在最新版Google中测试) 1.绘制线性渐变 1: // 获取canvas 的ID 2: var canvas = ...

  7. QT:图形的描画(折线,柱状图,多边形)

    1. 创建一个继承于QWidget的类,重载一个叫paintEvent的函数, 2. 在paintEvent函数中调用Qpainter类,此类是一个重量级类,在paintEvent函数尽量只创建一次 ...

  8. Qt之图形(QPainterPath)

    简述 QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状. 绘图路径是由许多图形化的构建块组成的对象,例如:矩形.椭圆.直线和曲线.构建块可以加入在封闭的子路 ...

  9. Qt之图形(绘制漂亮的圆弧)

    简述 综合前面对二维绘图的介绍,想必我们对一些基本绘图有了深入的了解,下面我们来实现一些漂亮的图形绘制. 简述 圆形 效果 源码 弧形 效果 源码 文本 效果 源码 旋转 效果 源码 圆形 经常地,我 ...

随机推荐

  1. CF1042F Leaf Sets (贪心+树上构造)

    题目大意:给你一棵树,让你对叶节点分组,保证每组中,任意两个叶节点之间的距离不大于K,求最小的组数 手动yy的贪心竟然对的 对于每个节点,维护一个$ma[i]$,表示在$i$节点的子树内 未被分组的叶 ...

  2. LVS负载均衡三种模式的实现

    何为lvs负载均衡? lvs负载均衡(linux virtual server)又名linux虚拟服务器.由章文嵩博士主导的负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux ...

  3. visual studio 2015将已有项目添加到码云(gitee)

    visual studio 2015将已有项目添加到码云的步骤包括:gitee新建项目.清空项目及VS发布项目 1.gitee新建项目 2.清空项目 清空项目则会将vs项目的master分支发布到gi ...

  4. oracle用户锁定

    https://www.cnblogs.com/lostyue/archive/2011/12/06/2278063.html

  5. HDU 4321 Contest 3

    题意:给定a和b,n,让你求b+a, b+2*a, .......b+n*a里面有多少1. 当统计第K位的时候 可以注意到 第 B+T*A 和 B+(T+2^(K+1))*A 位是相同的 那么 第K位 ...

  6. iOS知识点汇总

    1.怎样追踪app崩溃率.怎样解决线上闪退 当iOS设备上的App应用闪退时.操作系统会生成一个crash日志.保存在设备上.crash日志上有非常多实用的信息,比方每个正在运行线程的完整堆栈跟踪信息 ...

  7. 闭包(closure)与协程共用时要注意的事情

    闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...

  8. POJ 3178 凸包+DP (巨坑)

    题意: 思路: 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! (而且没有题解--.5555555--) 只能照着自己想的写了-- 先求出来凸包 求凸包的方法呢:先找出 ...

  9. MyBatis数据持久化(六)resultMap使用

    resultMap是MyBatis最强大也是最重要的特性,使用它我们可以將查询结果或者sql输入条件和一个HashMap的key进行映射,大大简化了sql查询条件的输入,而且使得数据的查询变得非常灵活 ...

  10. EL与JSTL学习(一)EL技术

    1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据(EL最重要的作 ...