2012-04-05 9 views
1

私のQGraphicsViewに、私はマップを表示します。私は、水平ルーラーと垂直ルーラーを上端と左端に丁寧に表示する必要があります。QGraphicsViewのフィーチャのようなレイヤーを分離

マップはスクロールする必要がありますが、上記のルーラは固定位置に表示する必要がありますが、スケール値は変更してください。

drawForegroundメソッドを使用して実装しようとしました。マップのサイズが大きいため、私は可視領域のみをペイントします。だからスクロールが完了するたびにupdate()する必要があります。しかし、この結果は時々ちらつく。

私は、アプローチのように別々のレイヤーを持つことが最もよいと感じています。

問題にアプローチするにはどうすればよいですか?

答えて

0

グラフィックビューのViewportUpdateModeをFullViewportUpdateに変更しただけで、ちらつきがなくなりました。

SmartViewportUpdateを使用すると、やや良い結果が得られます。

アニメーション中に欠点は、より多くの処理能力がかかることです。

2

上部と左側の定規を実装するための正しい方法はQGraphicsViewから派生して、コンストラクタで呼び出すことです:

// add two rulers on top and left. 
setViewportMargins(20, 20, 0, 0); 

// add grid layout 
QGridLayout* gridLayout = new QGridLayout(); 
gridLayout->setSpacing(0); 
gridLayout->setMargin(0); 

// create rulers 
hRuler = new Ruler(Qt::Horizontal); 
vRuler = new Ruler(Qt::Vertical); 

// add items to grid layout 
QWidget* corner = new QWidget(); 
corner->setBackgroundRole(QPalette::Window); 
corner->setFixedSize(20, 20); 
gridLayout->addWidget(corner, 0, 0); 
gridLayout->addWidget(hRuler, 0, 1); 
gridLayout->addWidget(vRuler, 1, 0); 
gridLayout->addWidget(viewport(), 1, 1); 

// finally set layout 
setLayout(gridLayout); 

このソリューションは、当初presented hereだった、それは非常に動作しますよく結果はlooks like thisです。

関連する問題