QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
http://blog.csdn.net/wangwei890702/article/details/8552482
QT:渐变
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象。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);
- }
- #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);
- }
QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)的更多相关文章
- Qt学习记录--Qt::CaseSensitive
Qt::CaseSensitivity 为枚举类型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的灵敏度. 比较字符串的时候 Qt::CaseSe ...
- Qt学习记录--02 Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说:一切皆消息.它可以很方便实现不同窗体之间的通信,然而MFC库将很多底层的消息都屏蔽了,尽管使用户更加方便.简易地处理消息,但 ...
- QT学习记录(1)-控件 QPushButton, QLineEdit, QLabel, QHBoxLayout, QGridLayout
1.一个简单的QT程序(QPushButton) /* 应用程序抽象类 */ #include <QApplication> /*窗口类*/ #include <QWidget> ...
- QT学习记录
QApplication app(argc,argv); 创建了一个QApplication对象,这个对象用于管理应用程序级别的资源.QApplication的构造函数要求两个参数,分别来自main的 ...
- QT学习记录之控件布局
作者:朱金灿 来源:http://blog.csdn.net/clever101 想到控件布局就会想到Windows编程中要实现对话框上的控件的合理布局是一件多么艰难的事情.对此QT提出了一个很方便的 ...
- QT学习记录之理解信号槽机制
作者:朱金灿 来源:http://blog.csdn.net/clever101 QT的事件机制采用的信号槽机制.所谓信号槽机制,简而言之就是将信号和信号处理函数绑定在一起,比如一个按钮被单击是一个信 ...
- QT学习记录之环境搭建
作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...
- 线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient
渐变,是指逐渐的,有规律性的变化,是一种规律性很强的现象.Qt提供了一个与渐变相关的QGradient类,目前支持三种渐变画刷,分别是线性渐变(QLinearGradient).辐射渐变(QRadia ...
- 30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient
渐变有三种:QLinearGradient.QConicalGradient . QRadialGradient 它们都有一个QGradient父类 QGradient父类的常用公共函数有: void ...
随机推荐
- 3673: 可持久化并查集 by zky
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2170 Solved: 978[Submit][Status ...
- SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)
4.添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同. 在文档库中,与一般的集合操作相同,直接使用SPFolderCollection的Add(string name)方法即可添加文件夹,例如 ...
- QL 获取当前日期,年、月、日、周、时、分、秒
?select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) as '月', Date ...
- Linux下带宽流量工具iftop实践
在Linux/类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop ...
- pycharm中格式标准化代码
点击之后,可以使代码标准化
- python面试题(五)
1 谈谈你对面向对象的理解? 面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想.OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数 ...
- windows下 安装python_ldap MySQL-python
//////////////////////////////////////////////////// 失败 ---------------------------------------- F ...
- python并发编程之多进程1--(互斥锁与进程间的通信)
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- loadrunner脚本篇——Run-time Settings之ContentCheck
运用场景(很少用到): ContentCheck的设置可用来让VuGen检测存在错误的站点页面.如果被测的Web应用没有使用自定义的错误页面,那么这里不用添加规则,因为LR在回放时候,可以默认的捕捉到 ...
- iOS 学习如何声明私有变量和私有方法
私有变量 首先来说 OC 中没有绝对的私有变量,这么说基于两点原因: 1可修改: 通过KVC 键值编码 来修改私有成员变量的值 2可读取 : 通过底层runtime 获取实例变量Ivar 对应 ...