1

私は次のようなコードを持っています:

     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 を使用するにはどうすればよいですか?

4

2 に答える 2

1

これはpainterではなく、ただのpathであるため、setPen()on aでは使用できません。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)、デフォルトのコンストラクターがすでにCosmeticQPen()であるwidth のペンを作成するため、必要ありません。0

于 2013-05-17T08:00:14.557 に答える
0

実際の問題が何であるかはわかりませんが、いくつかの発言があります:

  • 実際QPen::setCosmetic()にはboolパラメーターが必要です。1動作しtrueますが、正しいでしょう。
  • 新しく作成されたQPens は、既定のコンストラクターを介して作成された場合、幅が 0になります。
  • QPen幅 0 の s は、デフォルトで装飾的です

したがって、pen.setCosmetic(true)何の効果もありません。とにかく、ペンは装飾的である必要があります(つまり、倍率に関係なく同じ幅を持つ必要があります)。

最後に、@zakinster が述べたようにQPainterPath、メソッドがありませんsetPen()

于 2013-05-17T08:00:03.107 に答える