【问题标题】:Qt drawing a ring / circle with a holeQt画一个带孔的环/圆
【发布时间】:2017-06-05 15:01:50
【问题描述】:

我需要用 QPainter 画一个圆。当我使用 drawEllipse 函数时:

void UserClass::Draw(QPainter &painter) {

    painter.save();
    painter.setBrush( GetColor() );
    QPoint centerPosition = GetCenterPosition();
    painter.drawEllipse( centerPosition, m_CircleOuterRadius, m_CircleOuterRadius);
    painter.setBrush(QColor(0, 0, 0, 0));
    painter.drawEllipse( centerPosition, m_CircleInnerRadius, m_CircleInnerRadius);
    painter.restore();  
}

不幸的是,结果不是我想要的。我想让内圈不被填满。这就是为什么我将 alpha 值设为零,但它当然不起作用。我怎样才能有一个圆直到某个半径才 qt ?

【问题讨论】:

  • “当然没用” 不是问题陈述。请具体。
  • 我想说更好的方法是创建 QPainterPath 并使用 QPainetr::fillPath
  • 你需要空笔刷painter.setBrush(QBrush());或C++11风格:painter.setBrush({});和一些笔painter.setPen(GetColor());
  • @MarekR 但是我猜一个空的刷子也不会给我输出部分。因此不会是我需要的,
  • 外部是用钢笔绘制的。我已经写过了。

标签: c++ qt qpainter


【解决方案1】:

您应该创建一个QPainterPath,然后通过addEllipse() 将两个圆圈添加到它,首先是外部,然后是内部。这将有效地为您提供一个形状,即外圆,内圆打孔。

然后用绿色画笔填充画家路径,这将产生一个空心环。之后,如果你想要白色的轮廓,你也可以用白色的笔画出路径。

另请注意,画家路径只能创建一次并存储以供重复使用,而不是每次重绘时都重新创建。

【讨论】:

  • 谢谢。按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多