0

QPainterを使用してcairoのpush_group/pop_groupを実装したいのですが、新しいpainterDeviceを使用してbegin()中に、QPainterがすべての状態をリセットするため、すべての状態を手動で保存/復元する必要があります。

4

2 に答える 2

4

はい、チェックアウトしQPainter::save()てくださいQPainter::restore()

複数のQPainterの寿命の間に保存/復元する場合は、手動で行う必要があります。PainterState画家の状態(ペン、ブラシ、変換など)をカプセル化するクラスを作成してから、を保存することができQStack<PainterState>ます。

QPainterStateクラスがありますが、これは内部使用のみであり、単一のQPainterでのみ使用されると思います。QPainterStateメンバー(ここにコピーするには多すぎます)に興味がある場合は、ソース( "qpainter_p.h")を参照してください。

于 2012-05-19T04:51:49.560 に答える
0

QPainterオブジェクトを構築するときに、それをQPictureに描画できます。その後、必要に応じてリロードし、実際の QPaintDevice に描画できます。

QPicture picture;
QPainter painterQueued;
painterQueued.begin(&picture);           // paint in picture
painterQueued.drawEllipse(10,20, 80,70); // draw an ellipse
painterQueued.end();                     // painting done

QImage myImage;
QPainter painterTarget;
painterTarget.begin(&myImage);               // paint in myImage
painterTarget.drawPicture(0, 0, picture);    // draw the picture at (0,0)
painterTarget.end();                         // painting done

リスト、スタックなどで多くの QPicture オブジェクトをキューに入れ、必要に応じてそれらを再生できます。

于 2017-04-11T11:06:46.670 に答える