1

所以在我的 UI 设计器中,我有一个 ScrollArea 小部件,然后在我的 MainWindow.cpp 中,我创建了一个 QGraphicScene 和一个 QGraphics 视图。我创建了一个新的小部件并给该小部件一个 QVBoxLayout 以便它自动调整大小(这对我的理解是正确的)。

然后我用ui->scrollArea->setWidget(widget);这个新的小部件作为我的 scrollView 的孩子。

所有这一切似乎都是正确的,因为我有滚动条可以用来导航我的场景。然而; 使用该行ui->scrollArea->horizontalScrollBar()->setValue(0);仍然对滚动条值没有影响。

scene = new QGraphicsScene();
scene->setSceneRect(0,0,2500,2500);
view = new QGraphicsView(scene);

QWidget *widget = new QWidget;
view->setBackgroundBrush(Qt::white);
QVBoxLayout* bLayout = new QVBoxLayout(widget);
ui->scrollArea->setWidget(widget);

bLayout->addWidget(view);

widget->show();

ui->scrollArea->horizontalScrollBar()->setValue(0);
ui->scrollArea->verticalScrollBar()->setValue(0);
4

2 回答 2

2

我刚遇到这个问题。然后,经过调试,ui->scrollArea->verticalScrollBar()->value()我意识到在组件显示在屏幕上之前滚动区域没有大小,即它不会改变滚动,因为它还不可见。

这是一个示例 Python 代码,但与 C++ 相同,除了语言语法。

from PyQt5.QtWidgets import QDialog
...

    dialog = QDialog()
    ...

    verticalScrollBar = dialog.QPlainTextEdit.verticalScrollBar()
    horizontalScrollBar = dialog.QPlainTextEdit.horizontalScrollBar()

    # Has no effect, if you print the values, you will see always 0
    verticalScrollBar.setValue( horizontalScrollBar.maximum() )
    horizontalScrollBar.setValue( horizontalScrollBar.minimum() )

    dialog.show()

    # Now it has effect
    verticalScrollBar.setValue( horizontalScrollBar.maximum() )
    horizontalScrollBar.setValue( horizontalScrollBar.minimum() )
  1. 自动滚动 PyQT QTextWidget
于 2018-06-06T00:32:26.140 回答
1

如果您确定要处理正确的滚动条(如 thuga 评论中所指出的那样),请检查您的滚动区域是否在该初始化之后被修改。我的意思是我不确定这种行为,但是如果您修改了小部件中的某些文本,例如,我认为滚动条会受到影响。

您可能需要捕获一些小部件的事件以重新应用这些事件:

ui->scrollArea->horizontalScrollBar()->setValue(0);
ui->scrollArea->verticalScrollBar()->setValue(0);

如果它没有帮助,您应该尝试通过跟踪滚动条值来调试

ui->scrollArea->verticalScrollBar()->value()

看看你的设置是否应用得很好,也许什么时候被覆盖

以防万一,您也可以尝试此处指出的一些方法,但这可能与您的问题无关:setValue of ScrollBar Don't work at first time

于 2016-05-04T12:28:48.287 回答