如下代码:
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语句修改其颜色,即像上面的最后一种方法那样。