百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Qt 渐变 QLinearGradient、 QConicalGradient、QRadialGradient

haoteby 2025-02-14 23:21 5 浏览

渐变有三种: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(100,100,100,200);        //垂直渐变
 6 
 7     Linear.setColorAt(0,Qt::red);
 8     Linear.setColorAt(1,Qt::blue);
 9 
10     painter.setBrush(Linear);
11     painter.setPen(Qt::transparent);
12     painter.drawRect(100,100,100,100);          //100,100 到200,200
13 }

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击→领取「链接」

示例2-水平渐变

 1 void Widget::paintEvent(QPaintEvent *)
 2 {
 3     QPainter painter(this);
 4     painter.setRenderHint(QPainter::Antialiasing,true);
 5     QLinearGradient Linear(100,100,200,100);        //水平渐变
 6 
 7     Linear.setColorAt(0,Qt::red);
 8     Linear.setColorAt(1,Qt::blue);
 9     painter.setBrush(Linear);
10     painter.setPen(Qt::transparent);
11     painter.drawRect(100,100,100,100);          //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()/2,height()/2);
 6     QRadialGradient Radial(0,0,120,0,0);    //设置圆的原点和焦点在中心,半径120
 7 
 8     Radial.setColorAt(0,Qt::red);            
 9     Radial.setColorAt(0.5,Qt::blue);        //设置50%处的半径为蓝色
10     Radial.setColorAt(1,Qt::green);
11 
12     painter.setPen(Qt::transparent);
13     painter.setBrush(Radial);
14     painter.drawEllipse(-120,-120,240,240);
15 }

示例2:

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

相关推荐

手机如何检测是否被安装木马程序?如何防止路由器被黑客重置?

黑客攻击无线路由器有3种途径:...

盈盈可握的娇媚——全能美物ORICO WRE-30

由于工作的关系经常出差,在酒店除了一个RJ45接头,通常都没有无线网络可以提供,不可能自己携带太大的无线路由器,便携式的也买过几个,但是功能上大打折扣实在无法忍受,一直期盼能有既便携也功能丰富强大的产...

安卓重大锁屏密码漏洞,国产手机有几个中招了?

上周,一条新闻吸引了托尼注意。只用一张SIM卡,1分钟不到就能解锁你的安卓手机?...

零代码+免费+联网搜索:用DeepSeek+AnythingLLM搭建专属AI知识库

引言在信息爆炸的时代,如何高效管理私有数据并借助AI能力实现精准问答?本地私有知识库成为解决数据安全与智能化的最佳方案。本文将手把手教你使用开源工具AnythingLLM(项目地址:...

iOS越狱更轻松?黑客破解Lightning连接器

IT之家(www.ithome.com):iOS越狱更轻松?黑客破解Lightning连接器近日,德国黑客StefanEsser,也就是人们熟知的i0n1c在他Twitter上表示,黑客已成功破解了...

如何在 Windows 11 中更改 PIN

#寻找数码点评派#打开Windows设置,转到帐户登录选项,然后选择PIN(WindowsHello)...

2019年终黑客工具盘点-最佳篇

2019已经匆匆溜走,在2020伊始,小兮为大家带来了2019年终工具盘点的最佳篇,将分成三个部分为大家推荐工具,分别是Windows最佳工具、Linux最佳工具和手机最佳工具。话不多说,开整!Win...

磁盘被 BitLocker 锁住了怎么办?教你轻松解决

如果你的磁盘被BitLocker锁住,通常是因为系统检测到潜在的安全风险(如硬件改动、多次密码错误等)或丢失了密钥。以下是分步解决方案:一、确认被锁原因①硬件改动:更换主板、TPM芯片或启动顺序变化可...

风靡全球的安全应用AppLock,同样可能泄露隐私

安全研究人员发现,DoMobileLtd.公司开发的知名的安卓安全应用AppLock存在多个漏洞,容易受到黑客攻击。AppLock应用锁简介AppLock在超过50个国家拥有1亿多用户,它自身支持2...

安卓5.1.1前所有版本曝密码漏洞,轻松乱码即可破解锁屏

据德州大学研究人员发现代号棒棒糖的Android5.x存在一个严重的软件漏洞,只要攻击者能拿到机子的情况下,手机若设置的是数字密码解锁方式,只要输入足够长的乱码就能绕过屏幕锁定,进入到HOME主页取...

手机里有钱的,这5项设置要打开,就算丢了别人也偷不走

随着手机支付时代的到来,可恨的坏人也紧跟支付方式的变化,改为盯上了我们的手机。如果你手机里有钱的,那么一定不要掉以轻心,做好以下5项设置,让手机里的钱的更安全。设置SIM卡锁定设置SIM卡锁定,其实就...

原来破解邻居家的WiFi这么难?还是用万能钥匙吧

我们中的许多人认为,入侵wifi就像用铁锤打破塑料锁一样,并且使用以下提到的工具也是如此。入侵无线网络只是从防御性安全转移到攻击性安全的开始部分。入侵wifi包括捕获连接的握手并使用字典攻击等各种攻击...

电脑开机PIN码忘记了怎么办?教你不用重装系统也可以重置

在使用电脑的时候,我们往往会为了保护电脑的安全,从而设置开机密码。但是总会出现PIN码忘记导致无法开机使用,特别是许多用户反复的输入错误密码导致登录次数过多或者重复的开关机,登录选项被禁用,请使用其他...

送你个使用锦囊 防止蓝牙耳机被“策反”

你每天戴的蓝牙耳机可能被定位跟踪?近日有报道称,部分蓝牙耳机存在安全漏洞,可被不法分子快速植入具有定位功能的代码,从而实现远程跟踪,甚至监听。这一话题迅速登上微博热搜榜,不少网友惊呼:自己身边居然潜伏...

系统小技巧:无懈可击 Windows组策略管理系统密码

为了保护自己的系统安全,我们一般都会为系统设置密码。不过很多人为了记忆方便,设置的都是类似“123456”这样的简单密码,或者即使设置了较为复杂的密码,但是使用的时间很长也不变化。这些密码策略其实都有...