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 }

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 }

记性太差,需要这么记下来

浙公网安备 33010602011771号