でQGraphicsScene
満たされた がQGraphicsItems
あり、ユーザーはパンやズームを行ってさまざまな をすべて調べることができますQGraphicsItems
。ただし、 QGraphicsTextItem
常に画面の左上に表示されるラベルが必要です。ズームを無視するのは簡単ですがsetFlags(QGraphicsItem::ItemIgnoresTransformations)
、位置を強制的に左上に固定する方法はまだわかりません。自分のレーベルを同じ場所に "浮かせる" ための最良の方法は何ですか?
2454 次
2 に答える
7
それを行う唯一の(現実的な)方法は、フレームごとにテキストアイテムの位置を再計算することだと思います。これを行うには、QGraphicsView をサブクラス化し、paintEvent をオーバーライドし、QGraphicsView::mapToScene() を使用して新しい位置を計算します。何かのようなもの:
void MyGraphicsView::paintEvent(QPaintEvent*)
{
QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
m_textItem->setPos(scenePos);
}
私はこれを何度もやりましたが、とてもうまくいきました。
もちろん、Arnold Spence が回答で言及しているように、通常の QLabel を作成することもできます。ただし、これは多くの状況では機能しません (たとえば、ラベルをグラフィックス ビューの上に配置したいのに、OpenGL で高速化されたビューポートを使用している場合など)。
于 2011-04-29T10:17:26.893 に答える
3
おそらく、この質問QLabel
で説明したように、シーンの一部を1つの場所にとどまらせるのではなく、ビューに通常の権利を設定したいだけです。
注:別の回答で述べたように、このトリックはハードウェアアクセラレーションビューでは機能しないことがよくあります。このような場合、テキストアイテムをシーンの一部にする必要があります。
于 2011-04-29T07:32:18.210 に答える