QGraphicsView:禁用自动滚动

Seb*_*ach 6 qt scroll qgraphicsview

我希望有一个永远不会自动滚动的QGraphicsView.

类似:基本上,我的问题与http://developer.qt.nokia.com/forums/viewthread/2220相同,但该主题没有得到答案.

到目前为止我尝试了什么:

  • 在showEvent()和resizeEvent()中,我做了ui-> graphicsView-> fitInView(...),只要项目没有超出屏幕矩形就可以正常工作
  • 我也试过操纵视图变换,但除了缩放它的系数永远不会改变,所以这也没有结果
  • Diabling滚动条外观也没有帮助

另见http://doc.qt.io/qt-4.8/qgraphicsview.html.

小智 7

我的解决方案有点粗略,但我认为它非常直观:如果你不想让QGraphicsView滚动你的东西,请覆盖虚拟方法scrollContentsBy.

void QGraphicsViewDerived::scrollContentsBy(int, int)
{
    //don't do anything hah!
}
Run Code Online (Sandbox Code Playgroud)


Seb*_*ach 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);
}
Run Code Online (Sandbox Code Playgroud)