2011-01-14 94 views
6

自動的にスクロールしないQGraphicsViewを使用したいと考えています。QGraphicsView:自動スクロールを無効にする

類似:基本的には、私の質問はhttp://developer.qt.nokia.com/forums/viewthread/2220と同じですが、そのスレッドは回答を受け取りませんでした。限りの項目がないと正常に動作

  • をshowEvent内()とresizeEvent()、I行うUI-> graphicsView-> fitInView(...)、:

    私がこれまで試してみました何

    私はまた、ビュー変換操作しようとしたスクリーン矩形

  • をオーバーシュートが、離れてスケーリングから、それは係数が変化したことがないですので、これは無益だった、あまりにも
  • Diablingのスクロールバーの外観は助けにはならない、あまりにも

http://doc.qt.io/qt-4.8/qgraphicsview.htmlも参照してください。

答えて

3

私は解決策を見つけました(あなたの選択肢を投稿することを躊躇しないでください:))、私は15時間のようにGoogleとドキュメントで苦労しているので、この回答が参考になると思いました。

キーはfitInView()だけでなく、setSceneRect()を呼び出すことです。

void FooBar::resizeEvent(QResizeEvent *) { 
     fitView(); 
} 

void FooBar::showEvent(QShowEvent *) { 
     fitView(); 
} 

void FooBar::fitView() { 
     const QRectF rect = QRectF(-0.5,-0.5, 1, 1); 
     ui->graphicsView->fitInView(rect, 
            Qt::KeepAspectRatio); 
     ui->graphicsView->setSceneRect(rect); 
} 
7

私のソリューションは少し大ざっぱですが、私はそれはかなり直感的だと思う:あなたはQGraphicsViewが今まで自分のものをスクロールしたくない場合は、オーバーライドこれは私(自分のクラス名とFooBarのを置き換える)のためにそれをやりました仮想メソッドscrollContentsBy

void QGraphicsViewDerived::scrollContentsBy(int, int) 
{ 
    //don't do anything hah! 
} 
0

別の簡単な解決策、何の対話が必要とされていない場合、QGraphicsViewを無効にすることです:

view->setEnabled(false); 

これはまた、しかし、それはまた、もうマウスやキーボードのイベントを受信しません、スクロールするのを防ぐことができます。

1

view->setDragMode(QGraphicsView::NoDrag); 私のためのトリックでした。

anonvtからの解決策は、シーンのリフレッシュを妨げることを除いても機能しました。

1

私は完璧なソリューションは、あなたのビューのコンストラクタで

QGraphicsView::setSceneRect(yourScene->sceneRect()) 

を呼び出すことによって、自動スクロール動作が停止されました。

関連する問題