以编程方式滚动QScrollArea

问题描述 投票:14回答:2

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

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

它仅在用户调用时工作(例如按下按钮)。将它放在widget contstructor或showEvent中不起作用。可以自动完成吗?

qt qt4
2个回答
21
投票

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

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

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

希望这有帮助,问候

Edit0:额外的代码片段,显示如何在窗体的构造函数中滚动区域:

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);
}

3
投票

我花了一些时间使用调试器并发现scriollArea在构造函数中有0个大小,所以看起来只有在创建所有小部件并且可见时才可以滚动内容。滚动showEvent窗口工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.