Программная прокрутка QScrollArea - PullRequest
14 голосов
/ 28 августа 2010

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

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

Работает только при вызове пользователем (например, нажатием кнопки).Помещение в виджет contstructor или showEvent не работает.Это можно сделать автоматически?

Ответы [ 2 ]

21 голосов
/ 28 августа 2010

Я полагаю, что вы можете прокрутить содержимое 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);
}
3 голосов
/ 24 сентября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...