因此,在我的UI设计器中,我有一个ScrollArea Widget,然后在MainWindow.cpp中,我创建了一个QGraphicScene和一个QGraphics View。我创建了一个新的小部件,并给这个小部件一个QVBoxLayout,这样它就会自动调整大小(这对我的理解是正确的)。
然后,我使用ui->scrollArea->setWidget(widget);
使这个新的小部件成为我的scrollView的子部件。
所有这些似乎都是正确的,因为我有滚动条,可以用来导航我的场景。然而使用线CCD_ 2仍然对滚动条值没有影响。
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);
我刚刚遇到了这个问题。然后,在使用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() )
- 自动滚动PyQT QTextWidget
如果你确定了正确的滚动条地址(正如thuga在评论中指出的那样),也许可以检查你的滚动区域在初始化后是否被修改。我的意思是,我不确定bahaviour,但如果你修改了小部件中的一些文本,我认为滚动条会受到影响。
您可能需要捕捉一些小部件的事件来重新应用这些事件:
ui->scrollArea->horizontalScrollBar()->setValue(0);
ui->scrollArea->verticalScrollBar()->setValue(0);
如果没有帮助,您应该尝试使用跟踪滚动条值进行调试
ui->scrollArea->verticalScrollBar()->value()
看看你的设置是否得到了很好的应用,也许当它被覆盖时
以防万一,你也可以尝试这里指出的一些方法,但它可能与你的问题无关:ScrollBar的setValue第一次不起作用