Итак, в моем дизайнере пользовательского интерфейса у меня есть виджет ScrollArea, затем я создаю в своем MainWindow.cpp я создаю QGraphicScene и QGraphics View. Я создаю новый виджет и даю ему виджет 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 ScrollBar Не работает в первый раз
У меня просто была эта проблема. Затем после отладки с 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() )