Подтвердить что ты не робот

Программно прокрутите QScrollArea

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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