2010-08-27 105 views
12

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

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

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

回答

19

我相信你可以通过设置位置到其水平和垂直滚动条来滚动QScrollArea内容。水木清华,像这样:

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

不幸的是,当从小部件构造函数或showEvent调用时,它也不起作用。 – majaen 2010-08-28 08:13:05

+0

我想你应该发布一些你的代码,因为这个解决方案适用于我的表单的窗口小部件构造函数 – 2010-08-28 12:19:54

+0

好吧,我发现了错误。在设置滚动条之前,有resize(maximumSize()),这显然不是一个好主意(但我不确定为什么这会影响scrollAreas行为)。 – majaen 2010-08-28 13:31:49

2

我花了一段时间与调试ger,并发现scriollArea在构造函数中有0个大小,所以看起来只有当所有的小部件都被创建并可见时才能滚动某些东西。滚动showEvent窗口工作正常。