在 QT 中 "ui->scrollArea->horizontalScrollBar()->setValue(0)" 没有效果
In QT "ui->scrollArea->horizontalScrollBar()->setValue(0)" has no effect
因此,在我的 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);
如果您确定要解决正确的滚动条(如 thuga 评论中所指出的),也许检查您的滚动区域是否在该初始化之后被修改。我的意思是我不确定行为,但是如果您修改了小部件中的某些文本,我认为滚动条会受到影响。
您可能需要捕获您的小部件的某些事件才能重新应用这些事件:
ui->scrollArea->horizontalScrollBar()->setValue(0);
ui->scrollArea->verticalScrollBar()->setValue(0);
如果没有帮助,您应该尝试通过使用
跟踪滚动条值来进行调试
ui->scrollArea->verticalScrollBar()->value()
看看你的设置是否被很好地应用,也许什么时候被覆盖
以防万一,您也可以尝试此处指出的一些方法,但它可能与您的问题无关:setValue of ScrollBar Don't work at first time
我刚遇到这个问题。然后,在用 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() )
- Autoscroll PyQT QTextWidget
因此,在我的 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);
如果您确定要解决正确的滚动条(如 thuga 评论中所指出的),也许检查您的滚动区域是否在该初始化之后被修改。我的意思是我不确定行为,但是如果您修改了小部件中的某些文本,我认为滚动条会受到影响。
您可能需要捕获您的小部件的某些事件才能重新应用这些事件:
ui->scrollArea->horizontalScrollBar()->setValue(0);
ui->scrollArea->verticalScrollBar()->setValue(0);
如果没有帮助,您应该尝试通过使用
跟踪滚动条值来进行调试ui->scrollArea->verticalScrollBar()->value()
看看你的设置是否被很好地应用,也许什么时候被覆盖
以防万一,您也可以尝试此处指出的一些方法,但它可能与您的问题无关:setValue of ScrollBar Don't work at first time
我刚遇到这个问题。然后,在用 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() )
- Autoscroll PyQT QTextWidget