以编程方式滚动 QScrollArea

Posted

技术标签:

【中文标题】以编程方式滚动 QScrollArea【英文标题】:Programmatically scroll QScrollArea 【发布时间】:2010-08-27 23:25:20 【问题描述】:

我有一个带有 QScrollArea 的小部件,我希望它在包含它的小部件显示后立即向下滚动。我试过了:

scrollArea->ensureVisible(0,100, 20, 20);

它仅在用户调用时才起作用(例如按下按钮)。将它放在小部件构造函数或 showEvent 中不起作用。可以自动完成吗?

【问题讨论】:

【参考方案1】:

我相信您可以通过将位置设置为水平和垂直滚动条来滚动 QScrollArea 内容。嗯,像这样:

scrollArea->verticalScrollBar()->setValue(scrollArea->verticalScrollBar()->value() + 10);
scrollArea->horizontalScrollBar()->setValue(scrollArea->horizontalScrollBar()->value() + 10);  

上面的代码每次被调用时应该将滚动区域的内容向下滚动 10 像素,向右滚动 10 像素

希望这有帮助,问候

Edit0:额外的代码 sn-p 显示如何在表单的构造函数中滚动区域:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);

    QLabel *imageLabel = new QLabel;
    QImage image("my_large_image_file.JPG");
    imageLabel->setPixmap(QPixmap::fromImage(image));

    ui->scrollArea->setBackgroundRole(QPalette::Dark);
    ui->scrollArea->setWidget(imageLabel);

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

【讨论】:

不幸的是,当从小部件构造函数或 showEvent 调用时,它也不起作用。 我想你应该发布一些你的代码,因为这个解决方案在我的表单的小部件构造函数中对我有用 好的,我发现了这个错误。在设置滚动条之前有 resize(maximumSize()),这显然不是一个好主意(但我不确定为什么会以这种方式影响 scrollAreas 行为)。【参考方案2】:

我花了一些时间在调试器上,发现 scriollArea 在构造函数中的大小为 0,因此看起来只有当所有小部件都已创建并可见时才能滚动某些内容。在窗口的 showEvent 中滚动效果很好。

【讨论】:

以上是关于以编程方式滚动 QScrollArea的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式滚动视图

以编程方式滚动到 NestedScrollView 的顶部

以编程方式在iOS上滚动UIWebView

UITableView:以编程方式滚动内容视图

以编程方式滚动底部的滚动视图 - iphone

以编程方式滚动 UIScrollView