3

多数のアイテムを追加するウィジェットに QGraphicsView があります。

グラフィックビューをズームすると、これらの一部はポリゴンであり、一部は楕円(両方のQGraphicsItems)です

void Test::on_verticalSlider_sliderMoved(int position)
{
    ui->graphicsView->scale(1.1,1.1);
}

楕円はどんどん大きくなりますが、どれだけズームインしても基本的に同じ形状を保つように縮小したいので、基本的にはポリゴンをズームインしたいのですが、これらにプロットしたポイントはズームインしたくありませんポリゴン...それが理にかなっていれば

それが簡単になるとは知りませんが、一度にプロットされるすべての楕円点は同じ QGraphicsItemGroup 内にあるため、これを行うためにグループ全体に設定できるフラグが存在する可能性がありますか?

とにかく、私はこれについて何か助けていただければ幸いです

ありがとう

編集 ------ コードサンプル

item は QGraphicsEllipseItem で、m_group_point は QGraphicsItemGroup です

 item->setParentItem(m_group_point.get());

次に、グループをシーンに追加します

m_scene2->addItem(m_group_point.get());

次に、そのシーンをビューに追加します

ui->graphicsView->setScene(m_scene2.get());

それら.getは共有ポインタであるためです

4

3 に答える 3

2

まあ、ignoreTransformation は確かに適切な方法です。

QGraphicsItem::ItemIgnoresTransformations : アイテムは継承された変換を無視します (つまり、その位置は依然として親に固定されていますが、親またはビューの回転、ズームまたは剪断変換は無視されます)。このフラグは、テキスト ラベル アイテムを水平に保ち、拡大縮小しない場合に役立ちます。これにより、ビューが変換されても読み取り可能になります。設定すると、アイテムのビュー ジオメトリとシーン ジオメトリが別々に維持されます。座標をマップし、ビュー内の衝突を検出するには、deviceTransform() を呼び出す必要があります。デフォルトでは、このフラグは無効になっています。このフラグは Qt 4.3 で導入されました。

真ん中に留まることについては、シーン内の楕円を適切な位置に移動して、適切なシーン座標を持つようにし、ビューの変換を無視するように指示して、ドキュメントに記載されているズーム/回転などを無視するようにします。

于 2013-08-06T15:14:19.467 に答える
2

Qt ドキュメントでは、フラグ QGraphicsItem::ItemIgnoresTransformations について次のように述べています。

アイテムは継承された変換を無視します (つまり、その位置は依然として親に固定されていますが、親またはビューの回転、ズームまたはせん断変換は無視されます)。

これはあなたが望むものです。アイテムを QGraphcisItemGroup に追加しました。このため、Qt ヘルプには次のように記載されています。

QGraphicsItemGroup は、その子の ItemIgnoresTransformations フラグを無視します (つまり、グループ アイテムのジオメトリに関して、子は変形可能であるかのように扱われます)。

これを読むと、QGraphicsItem は親に基づいて ItemIgnoreTransformations フラグを使用しますが、これはあなたの場合は QGraphicsGroup ですが、このクラスは子のフラグを無視するため、問題を引き起こしている可能性があります。

したがって、親グループではなく、その子にフラグを設定してください。

于 2013-08-07T08:17:51.077 に答える
1

一定サイズに保ちたいオブジェクトに ItemIgnoresTransformations フラグを設定してみてください。

于 2013-08-06T15:03:44.690 に答える