2012-03-25 20 views
1

QGraphicsViewに問題があります。 QGraphicsViewをサブクラス化してpaintEventを再定義しました。私はノードのためのQGraphicsItemとエッジのQGraphicsLineItemを使用して、ある種のツリーを描きたい。QGraphicsViewアーチファクト

void GraphicsView::paintEvent (QPaintEvent * event) { 
if(arbre!=NULL) { 
    arbre->line1->setLine(arbre->text->x(),arbre->text->y(), 
          arbre->text1->x(),arbre->text1->y()); 

    QGraphicsView::paintEvent(event); 
    cout << "redessine" << endl; 
} 

}

しかし、私は、高速にノードを移動するとき、いくつかのアーチファクト(黒線)がビューに表示されます。それらを取り除くための提案はありますか?

+0

問題へのあなたのアプローチに欠陥があるようです。通常、この行をシーンに追加してシーンをビューに設定します。 [this](http://qt-project.org/doc/qt-4.8/graphicsview.html)を読んだことがありますか? –

+0

背景がありますか? – paulm

答えて

1

QGraphics*ItemサブクラスのboundingRect()メソッドに余白を入れてください。

http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#boundingRect

PS:paintEventメソッドのロジックを入れないでください。このメソッドは、UIフィールドの内容などを収集するのではなく、要素をレンダリングするために使用されます。

+0

私はすでに塗装ではないコードをすべて削除しました。 –

+0

それかもしれないと思います。私はかつてboundingRect()を間違って定義していましたが、問題はビューのゆっくりと変化する位置で発生しました - アイテムは中心的に描かれませんでした(シーンの可視領域に入った後に再描画されませんでした。)viewportUpdateModeとデフォルト値MinimalViewportUpdate - ビューポートは何かが変更された場所でのみ描画されます。 – silverado

1

オブジェクト配置の変更前​​にQGraphicsItem :: prepareGeometryChange()を呼び出してください。それは私にも同様の問題をもたらしました。

関連する問題