2012-03-24 3 views
0

これは私がやろうとしていることです - カスタム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(); 
.... 

このすべてが正常に動作しますが、それはメインウィンドウに表示されるように、私は、ビュー/シーン必要はしたくない - どんながありますこれについて

+0

私は間違いなくただの瞬間を持っていました。私はすでに何かのためのシーン/ビューを持っています。私はそれを利用してQGraphicsItemを保持することができます。しかし、誰かがQGraphicsItemからQItemを保存してシーン/ビューを必要としないようにする必要があるというオリジナルの質問に答えるために、私はこれを開いたままにしておきますダイアログ/メインウィンドウに表示されます。 – giraffee

+0

なぜあなたはそこにペイントしたいですか? –

+0

再考の後、カスタムQGraphicsItemは必要ありません。私がそれをQImageにペイントしたいのは、QPixmapに変換してQCursorで使うことだけです。 – giraffee

答えて

2

QPainterを受け入れるカスタムメソッドを作成するだけでは、QImageに1つの絵を描き、アイテムに1つの絵を描くことはできませんか?

+0

これは私がやったことです。何らかの理由で私の画家がまだグラフィックス・スケッチに絵を描いていたのですが、それは現場に出ていた理由ではありませんでした。私があなたが行っていたものを想定しているカスタムQGraphicsItemも必要ありません。 – giraffee

関連する問題