QBrush之路径渐变画刷(CoordinateMode::LogicalMode与CoordinateMode::ObjectMode)

1、Qt中路径渐变画刷默认的坐标系为CoordinateMode::LogicalMode,该模式下,路径渐变遵循既定规则按整个窗体的坐标系进行渐变填充,以下代码及图示展示LogicalMode下路径渐变的填充效果,通过对比可以明显看出LogicalMode的填充坐标系为整个窗体:

 1 void Widget::paintEvent(QPaintEvent *event)
 2 {
 3     Q_UNUSED(event);
 4 
 5     QPainter painter(this);
 6 
 7     painter.fillRect(this->rect(),QBrush(QColor(255,255,255)));
 8     painter.setRenderHint(QPainter::Antialiasing);//抗锯齿
 9 
10     QLinearGradient gradient(0,0,0,150);
11     gradient.setColorAt(0, Qt::red);
12     gradient.setColorAt(1, Qt::blue);
13     gradient.setCoordinateMode(QLinearGradient::CoordinateMode::LogicalMode);
14 
15     QBrush br(gradient);
16     painter.setBrush(br);
17 //    painter.fillRect(this->rect(),br);
18 
19     painter.drawEllipse(0,0,this->width()/3,this->height()/3);
20 
21     painter.drawEllipse(this->width()/3,this->height()/3,this->width()/3,this->height()/3);
22     painter.drawEllipse(this->width()*2/3,this->height()*2/3,this->width()/3,this->height()/3);
23 }

image   image

2、CoordinateMode::ObjectMode为在画图对象内进行渐变填充,即在所绘制的目标坐标系内进行渐变填充,以下为该模式下填充方式的展示:

 1 void Widget::paintEvent(QPaintEvent *event)
 2 {
 3     Q_UNUSED(event);
 4 
 5     QPainter painter(this);
 6 
 7     painter.fillRect(this->rect(),QBrush(QColor(255,255,255)));
 8     painter.setRenderHint(QPainter::Antialiasing);//抗锯齿
 9 
10     QLinearGradient gradient(0,0,0,1);
11     gradient.setColorAt(0, Qt::red);
12     gradient.setColorAt(1, Qt::blue);
13     gradient.setCoordinateMode(QLinearGradient::CoordinateMode::ObjectMode);
14 
15     QBrush br(gradient);
16     painter.setBrush(br);
17 
18     painter.drawEllipse(0,0,this->width()/3,this->height()/3);
19 
20     painter.drawEllipse(this->width()/3,this->height()/3,this->width()/3,this->height()/3);
21     painter.drawEllipse(this->width()*2/3,this->height()*2/3,this->width()/3,this->height()/3);
22 }

image

posted @ 2026-01-22 10:58  左边的翼  阅读(3)  评论(0)    收藏  举报