6

自動的にスクロールしない QGraphicsView が必要です。

同様: 基本的に、私の質問はhttp://developer.qt.nokia.com/forums/viewthread/2220と同じですが、そのスレッドには回答がありませんでした。

私がこれまでに試したこと:

  • showEvent() と resizeEvent() 内で、ui->graphicsView->fitInView(...) を実行します。これは、アイテムが画面の四角形をオーバーシュートしない限り問題なく動作します。
  • ビュー変換の操作も試みましたが、スケーリングを除けば係数は決して変わらないため、これも無駄でした
  • スクロールバーの外観を無効にしても役に立たない

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

4

6 に答える 6

8

私の解決策は少し大ざっぱですが、かなり直感的だと思います。QGraphicsView でスクロールしたくない場合は、仮想メソッド scrollContentsBy をオーバーライドします。

void QGraphicsViewDerived::scrollContentsBy(int, int)
{
    //don't do anything hah!
}
于 2011-02-25T18:31:52.857 に答える
4

私は解決策を見つけました(あなたの代替案を投稿することを躊躇しないでください:))、それでも私は15時間のようにグーグルとドキュメントで苦労したのでこの答えが役立つかもしれないと思いました。

重要なのは、fitInView()だけでなく、setSceneRect()も呼び出すことです。これは私のためにそれをしました(FooBarをあなた自身のクラス名に置き換えてください):

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);
}
于 2011-01-14T09:45:49.413 に答える
2

電話することで、完璧な解決策を見つけました

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

ビューのコンストラクターで、自動スクロール動作が停止されます。

于 2016-08-18T14:31:33.530 に答える
1

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

anonvt の解決策も機能しましたが、シーンのリフレッシュを妨げました。

于 2014-11-28T11:42:35.400 に答える
0

対話性が必要ない場合の別の簡単な解決策は、QGraphicsView を無効にすることです。

view->setEnabled(false);

これにより、スクロールもできなくなりますが、マウスまたはキーボードのイベントも受信しなくなります。

于 2014-06-08T04:56:33.327 に答える