1

Windowsでqt 5.0.1を使用しています。200k 以上のカスタム QGraphicsItem を作成しています。これらのカスタム アイテムに、マウス ホバー、マウス クリックなどの基本的な機能主義者を追加しました。このアイテムは静的です。しかし、これらのアイテムの上に、アニメーション化するいくつかのアイテム (最大 200) を追加します (さまざまなプロパティ アニメーション、スケール、不透明度など)。これらのアイテムをシーンに追加すると、比較的強力なワークステーションでは非常に遅くなります。

QGraphicsScene *scene = new QGraphicsScene();
scene->setSceneRect(0, 0, width, height);
scene->setBackgroundBrush(Qt::darkGray);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);

QGraphicsView *view = new QGraphicsView( scene );
view->setRenderHint(QPainter::Antialiasing, false);
view->setResizeAnchor(QGraphicsView::AnchorViewCenter);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->resize( width, height );
view->setOptimizationFlags(QGraphicsView::DontSavePainterState);
view->setViewportUpdateMode( QGraphicsView::SmartViewportUpdate);
view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
view->setCacheMode(QGraphicsView::CacheBackground);
view->setViewportUpdateMode( QGraphicsView::FullViewportUpdate);
view->show();

次のことを試しましたが、アンチエイリアシングが有効になっているように見えるため、レンダリングされたビューが非常に悪くなりますが、ピクセルラベルの精度が必要です。

view->setViewport(new QGLWidget( QGLFormat(QGL::SampleBuffers))); 

いくつかの重要な Qt プログラミングのトリックを見逃していますか? 提案してください。コードを投稿したり、場合によっては詳細を説明したりできます。前もって感謝します。

4

1 に答える 1

3

アイテムがたくさんある場合、ボトルネックとなるのは、同時に画面上に多くのアイテムがある場合です。つまり、アイテムがかなり小さいことを意味します。そのような場合、別の LOD を使用することをお勧めします。これが詳細レベルです。アイテムが小さい場合は、簡略化したバージョンを描きます。これを LOD のベイク処理とキャッシング、および描画する OpenGL ウィジェットと組み合わせると、一度に数万または数十万のアイテムを簡単に取得できます。

于 2013-03-28T12:10:14.547 に答える