在QT中"ui->scrollArea->horizontalScrollBar()->setValue(0)"没有效果



因此,在我的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() )
  1. 自动滚动PyQT QTextWidget

如果你确定了正确的滚动条地址(正如thuga在评论中指出的那样),也许可以检查你的滚动区域在初始化后是否被修改。我的意思是,我不确定bahaviour,但如果你修改了小部件中的一些文本,我认为滚动条会受到影响。

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

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

如果没有帮助,您应该尝试使用跟踪滚动条值进行调试

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

看看你的设置是否得到了很好的应用,也许当它被覆盖时

以防万一,你也可以尝试这里指出的一些方法,但它可能与你的问题无关:ScrollBar的setValue第一次不起作用

相关内容

  • 没有找到相关文章

最新更新