これは私がやろうとしていることです - カスタムQGraphicsItemを使用して、私はQImageにペイントするQPainterセットアップを持っています私が必要とするまで、QImageをメモリに保持してください)。シーン/ビューを必要とせずにQImageにQGraphicsItemをペイントします
QGraphicsItem :: paint()は、QGraphcsItemがシーンに属し、シーンがビューに属し、ビューとシーンが隠されていない場合にのみ呼び出されることがあります。
ここではテスト目的のために私のプロジェクト外のコードです:
MyQGfx Class
void MyQGfx::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
qDebug() << "begin of paint function";
QRectF rec = boundingRect();
QImage image(boundingRect().size().toSize(),
QImage::Format_ARGB32_Premultiplied);
image.fill(0);
// construct a dedicated offline painter for this image
QPainter imagePainter(&image);
imagePainter.translate(-boundingRect().topLeft());
// paint the item using imagePainter
imagePainter.setPen(Qt::blue);
imagePainter.setBrush(Qt::green);
imagePainter.drawEllipse(-50, -50, 100, 100);
imagePainter.end();
if(image.save("C://plot.jpg"))
{
qDebug() << "written";
}
else {
qDebug() << "not written";
}
}
MainWindow Class
....
QGraphicsView* view = new QGraphicsView(this);
QGraphicsScene* scene = new QGraphicsScene(this);
view->setScene(scene);
MyQGfx* gfx = new MyQGfx();
scene->addItem(gfx);
gfx->update();
....
このすべてが正常に動作しますが、それはメインウィンドウに表示されるように、私は、ビュー/シーン必要はしたくない - どんながありますこれについて
私は間違いなくただの瞬間を持っていました。私はすでに何かのためのシーン/ビューを持っています。私はそれを利用してQGraphicsItemを保持することができます。しかし、誰かがQGraphicsItemからQItemを保存してシーン/ビューを必要としないようにする必要があるというオリジナルの質問に答えるために、私はこれを開いたままにしておきますダイアログ/メインウィンドウに表示されます。 – giraffee
なぜあなたはそこにペイントしたいですか? –
再考の後、カスタムQGraphicsItemは必要ありません。私がそれをQImageにペイントしたいのは、QPixmapに変換してQCursorで使うことだけです。 – giraffee