QBrush的setColor函数不能改变画刷颜色的原因及解决方法

如下代码:

void QtWidgetsApplication1::paintEvent(QPaintEvent* event)
{
    QPainter p(this);
    QBrush brush;
    brush.setColor(Qt::red);
    p.setBrush(brush);
    p.drawRect(10, 10, 300, 100);
}

本意是想绘制一个红色矩形,但结果是矩形没有被红色填充,画刷根本就没起作用。更改代码为如下两种方式可以绘制红色矩形:

void QtWidgetsApplication1::paintEvent(QPaintEvent* event)
{
    QPainter p(this);
    QBrush brush(Qt::red);
    p.setBrush(brush);
    p.drawRect(10, 10, 300, 100);
}

void QtWidgetsApplication1::paintEvent(QPaintEvent* event)
{
    QPainter p(this);
    QBrush brush(Qt::transparent);
    brush.setColor(Qt::red);
    p.setBrush(brush);
    p.drawRect(10, 10, 300, 100);
}

原因:

如果是QBrush brush;即不带任何参数默认构造出的画刷,其默认属性为Qt:noBrush。若设置为noBrush,之后修改这个brush的颜色,是无法被更改的,不能使用setColor语句修改其颜色。可以想象为装修刷墙,QBrush是刷子,颜色是涂料,装修刷墙是将刷子沾满涂料再去刷墙,而Qt:noBrush表示不存在任何刷子,没有刷子,涂料再丰富多彩,也刷不了墙。若希望实现画刷从无填充到有填充的转换,可以申明的时候把画刷的属性设置为透明色,然后再调用setColor语句修改其颜色,即像上面的最后一种方法那样。

                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值