1

I have a code like:

     QPainterPath groupPath;
     QPen pen; // new

     pen.setCosmetic(1); // new

     groupPath.setPen(pen); // error (error: class "QPainterPath" has no member "setPen")
     groupPath.moveTo(60.0, 40.0);
     groupPath.arcTo(40.0, 35.0, 40.0, 10.0, 180.0, 180.0);
     groupPath.moveTo(40.0, 40.0);
     groupPath.lineTo(40.0, 80.0);
     groupPath.arcTo(40.0, 75.0, 40.0, 10.0, 0.0, 180.0);
     groupPath.lineTo(80.0, 80.0);
     groupPath.lineTo(80.0, 40.0);
     groupPath.closeSubpath();

How can I use setPen to use Cosmetic in my code?

4

2 回答 2

1

您不能setPen()在 a 上使用,QPainterPath因为它不是画家,它只是一条路径

您应该创建一个QPaintersetPen()在其上使用,然后绘制路径:

QPainter painter(this);
QPen pen;
pen.setCosmetic(true);
painter.setPen(pen);

QPainterPath groupPath
groupPath.moveTo(60.0, 40.0);
groupPath.arcTo(40.0, 35.0, 40.0, 10.0, 180.0, 180.0);
groupPath.moveTo(40.0, 40.0);
groupPath.lineTo(40.0, 80.0);
groupPath.arcTo(40.0, 75.0, 40.0, 10.0, 0.0, 180.0);
groupPath.lineTo(80.0, 80.0);
groupPath.lineTo(80.0, 40.0);
groupPath.closeSubpath();

painter.drawPath(groupPath);

此外,正如@Andreas所说,pen.setCosmetic(true)不需要,因为默认构造函数QPen()创建了一个宽度笔0,这已经是Cosmetic

于 2013-05-17T08:00:14.557 回答
0

不确定您的实际问题是什么,但有一些评论:

  • 实际上QPen::setCosmetic()需要一个bool参数;1会工作,但true会是正确的。
  • 新创建QPen的通过默认构造函数创建时宽度为0
  • QPen默认情况下,宽度为 0 的 s 是装饰性的

因此,pen.setCosmetic(true)不会有任何效果,你的笔应该是装饰性的(意味着,具有相同的宽度,与比例因子无关)。

最后,正如@zakinster 提到的,QPainterPath没有setPen()方法。

于 2013-05-17T08:00:03.107 回答