【问题标题】:In QT "ui->scrollArea->horizontalScrollBar()->setValue(0)" has no effect在QT中“ui->scrollArea->horizo​​ntalScrollBar()->setValue(0)”没有效果
【发布时间】:2016-05-04 09:19:11
【问题描述】:

所以在我的 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);

【问题讨论】:

  • 可能你看到的滚动条不属于ui->scrollArea,而是属于view

标签: c++ qt scrollview qtwidgets


【解决方案1】:

我刚遇到这个问题。然后,在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. Autoscroll PyQT QTextWidget

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

    • 是的,我想我可能使用了“错误”的滚动条,值永远不会从 0 改变:/ 但这对我来说毫无意义,我不明白这些滚动条可能来自哪里从,他们完美地控制小部件
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多