2010-08-27 3 views
12

У меня есть виджет с QScrollArea, и я хочу, чтобы он прокручивался вниз сразу после появления виджета, содержащего его. Я пробовал:Programmatically scroll QScrollArea

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

Он работает только при вызове пользователя (например, нажатие кнопки). Вставка его в конструктор виджета или showEvent не работает. Можно ли это сделать автоматически?

ответ

19

Я считаю, что вы можете прокручивать содержимое 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); 
} 
+0

К сожалению, при вызове из конструктора виджета или showEvent он также не работает. – majaen

+0

Я думаю, вы должны опубликовать часть своего кода, так как это решение работает для меня в конструкторе виджета моей формы. –

+0

Хорошо, я нашел ошибку. Перед установкой полос прокрутки был изменен размер (maximumSize()), что, очевидно, не очень хорошая идея (однако я не уверен, почему это повлияло на поведение scrollAreas таким образом). – majaen

2

Я провел время с отладкой ger и выясните, что scriollArea имеет 0 размеров в конструкторе, поэтому похоже, что можно прокручивать что-то только тогда, когда все виджеты создаются и видны. Прокрутка в окне showEvent отлично работает.

Смежные вопросы