Qt 之图形(渐变填充)

简述

QGradient 可以和 QBrush 组合使用,来指定渐变填充。
Qt 目前支持三种类型的渐变填充:

  • QLinearGradient:显示从起点到终点的渐变
  • QRadialGradient:以圆心为中心显示渐变
  • QConicalGradient:围绕一个中心点显示渐变
    渐变类型可以使用 type() 函数来检索,类型中的每一个都是 QGradient 的子类。

渐变类型


使用 QGradientStop 类来描述渐变中过渡点的位置和颜色。例如:一个位置和一个颜色。使用 setColorAt() 函数来定义一个过渡点。或者,使用 setStops() 函数来一次定义多个过渡点。需要注意的是,后者的功能将替换当前设置的过渡点。
这是渐变的一套完整的过渡点(通过 stops() 来访问)描述渐变区域如何被填充。如果没有指定任何过渡点,那么将会从 0 点(黑色)渐变为 1 点(白色)。

QLinearGradient

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

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) 是渐变的起点

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));
}

原文地址:http://blog.51cto.com/4754569/2321333

时间: 2024-08-04 01:13:12

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

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

在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPaintEvent *){    QPainter painter(this);    QLinearGradient linearGradient(100,150,300,150);    //从点(100,150)开始到点(300,150)结束,确定一条直线    linearGradient.se

QT 基本图形绘制

QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿       QPainter::TextAntialiasing 在可能的情况下,文字反锯齿       QPainter::SmoothPixmapTransform   采用平滑的Pixmap变换算法 2.绘制函数 3.风格 1)画刷风格 2)画笔风格 3)画笔连接点风格 4)顶端风格 4.绘图前的准备 1  如果要在绘图设备(一般为窗口部件)上绘图,只需创建一个QPainte

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

本文将演示创建一个具有渐变填充色的图形 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 //初始化一个原点在(10,80),尺寸为(300,300)的矩形常量,作

VC 实现视图区背景颜色渐变填充

[cpp] view plaincopy void CSTest1View::OnDraw(CDC* pDC) { CSTest1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rcClient; GetClientRect(&rcClient); rcClient.DeflateRect(5,5,5,5); if(m_nMode==0) { TRIV

Visio中手绘图形的填充

由于工作需要,现需用Visio绘制一个类似于DNA的螺旋图,为了使图片看起来更富有立体感,所以背面需要填充浅灰色,但由于是自己画的图形,并不能填充颜色,在网上查了很多资料也没有找到一个彻底的解决办法,不过倒是给我提供了一些思路,废话不多说了,现在我就详细说一下Visio中手绘图形的填充. 以手绘正方形的填充为例,注意是手绘,不是用Visio提供的正方形! Step1:用线条画出4条等长直线段 Step2:点击指针工具下面的"连接线",然后将光标移动至线条的顶端使其出现绿色的对其确认标志

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

简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行绘图操作,其提供的API在GUI或QImage.QOpenGLPaintDevice.QWidget和QPaintDevice显示图形(线.形状.渐变等).文本和图像. QPaintDevice不直接绘制物理显示画面,而利用逻辑界面的中间媒介.例如,绘制矩形图形时,为了将对象绘制到QWidget.Q

Qt之图形(绘制文本)

简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPainter的darwText()函数来实现,里面包含多个重载函数,其中,可以通过QRect来指定绘制的区域,也可以通过QPoint来指定绘制的起始点. QFont类可以辅助设置文本的大小.粗细.字符间距等,然后使用setFont()来设置. QFontInfo类用来获取字体的信息,可以通过fontInfo

使用Qt 开发图形界面的软件

3DSlicer, a free open source software for visualization and medical image computing AcetoneISO:镜像文件挂载软件 Adobe Photoshop Album, an image organizing application Arora:一款跨平台的开源网页浏览器 Autodesk MotionBuilder, professional 3D character animation software Au

Qt之图形(转换)

简述 QTransform类指定坐标系的2D转换,可以指定平移.缩放.扭曲(剪切).旋转或投影坐标系.绘制图形时,通常会使用. QTransform与QMatrix的不同之处在于,它是一个真正的3x3矩阵,允许视角转换,QTransform的 toAffine()方法允许将QTransform转换到QMatrix.如果视角转换已在矩阵指定,则转换将导致数据丢失. 简述 常用接口 正常 效果 源码 平移 效果 源码 旋转 效果 源码 缩放 效果 源码 扭曲 效果 源码 常用接口 函数 描述 tra