如何在QpainterPath中使用QPen?

时间:2013-05-17 07:50:16

标签: c++ qt

我有一个代码:

     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();

如何在代码中使用setPen来使用Cosmetic?

2 个答案:

答案 0 :(得分:1)

您无法在setPen()上使用QPainterPath,因为它不是画家,它只是路径

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

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的默认构造函数创建了一个宽度为{{1}}的笔,这已经是化妆品

答案 1 :(得分:0)

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

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

因此,pen.setCosmetic(true)不会产生任何影响,无论如何,你的笔应该是装饰性的(意思是,具有与比例因子无关的相同宽度)。

最后,正如@zakinster所说,QPainterPath没有setPen()方法。