QPainterを使用してcairoのpush_group/pop_groupを実装したいのですが、新しいpainterDeviceを使用してbegin()中に、QPainterがすべての状態をリセットするため、すべての状態を手動で保存/復元する必要があります。
1102 次
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 に答える