3

私はQtの初心者ではありませんが、わからないことがいくつかあります...私はPythonでプログラミングしていますが、どの言語でも自由に回答を投稿してください。

したがって、QGraphicsScene内に配置されたいくつかのQGraphicsItemあり、シーンは通常のQGraphicsViewで表示されます。すべてが正常です。

私のシーンは非常に大きく、10,000 x 10,000ピクセルで、すべてのグラフィックアイテムが散らばっています。

例えば ​​:

#シーンオブジェクトを作成します。
 シーン=QtGui.QGraphicsScene()
 scene.setSceneRect(0、0、10000、10000)
 #ビューオブジェクトを作成しています。
 ビュー=QtGui.QGraphicsView()
 view.setScene(シーン)

 #シーンにいくつかのオブジェクトを追加します。
 #scene.addItem(...)
 #..。

 #アイテムのリスト。
 items =scene.items()

 #これは私がアイテムを中心にする方法です。
 view.centerOn(some_item)
 view.fitInView(some_item、Qt.KeepAspectRatio)

私の質問は、centerOnに似たものを使用して、すべてのアイテムのビューをどのように中央に配置できますか?

現在、centerOnは次のアイテムで高速になります。カーブを緩和するQPropertyAnimationを使用して、ゆっくりと移動したいですか?

大きな円でview.translate(1、1)を使用してビューを次のアイテムに移動しようとしましたが、centerOnのように、移動が速すぎます。

翻訳の間にtime.sleep(0.01)で少し待ってみましたが、シクルが存在するまでウィンドウがブロックされます...それは悪いことです。

どうもありがとうございます !

4

2 に答える 2

2

QTimeLine を (EaseInOutCurve を使用して) 使用し、それをスロットに接続してから、その値を使用してビュー rect を次のように変換しました。

const QRectF r = ...calculate rect translated by timeline value and trajectory...
view->setSceneRect( r );
view->fitInView( r, Qt::KeepAspectRatio );

軌跡については、スムーズなスクロールのために開始位置と終了位置を持つ QLineF を使用しました。次に、QLineF::pointAt() を使用して、タイムラインによって発行された値を適切に使用できます。

私の場合、SceneRect と fitInView の両方を設定して、希望どおりに動作させる必要がありました。

于 2010-11-05T11:04:00.527 に答える
1

setSceneRect に高い値を設定することで問題を解決しました。次に、オブジェクトまたは位置にシーンを集中させます。

例:

this->ui->graphicsView->setSceneRect (0,0,100000000, 100000000); this->ui->graphicsView->centerOn(500,1030);

setSceneRect サイズでは、GraphicsView が正しく機能しません。

于 2014-04-17T20:25:45.537 に答える