以编程方式滚动QScrollArea

时间:2010-08-27 23:25:21

标签: qt qt4

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

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

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:3)

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