Автопрокрутка QScrollArea при изменении размера виджетаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Автопрокрутка QScrollArea при изменении размера виджета

Сообщение Гость »


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

Код: Выделить всё

// widget.hpp

class MainWidget: public QScrollArea {
Q_OBJECT
public:
explicit MainWidget();

public slots:
void add_new_elem(bool);

private:
void initialize_new_item(void);

QWidget* scrolled_widget;
std::unique_ptr scrolled_widget_layout;
std::unique_ptr add_new_item_button;
};

Код: Выделить всё

// widget.cpp
#include "widget.hpp"

MainWidget::MainWidget() : QScrollArea() {
scrolled_widget = new QWidget(this);
scrolled_widget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
scrolled_widget_layout = std::make_unique(scrolled_widget);

add_new_item_button = std::make_unique("Add new item!");
add_new_item_button->show();

connect(add_new_item_button.get(), &QPushButton::clicked, this, &MainWidget::add_new_elem);

setWidget(scrolled_widget);
setWidgetResizable(true); // required!
setAlignment(Qt::AlignBottom | Qt::AlignLeft);
}

void MainWidget::initialize_new_item(void) {
auto elem = new Elem();
scrolled_widget_layout->addWidget(elem);
}

void MainWidget::add_new_elem(bool) {
initialize_new_item();
QScrollBar* scrollbar = verticalScrollBar();

scrollbar->setSliderPosition(scrollbar->maximum()); */
}
Проблема в том, что к тому времени

Код: Выделить всё

scrollbar->maximum()
вызывается, property has not yet been updated (maybe because of the event loop), and the scrollbar is set to an incorrect position.
I searched documentation but did not find signals that indicate geometry changes, and I hate the idea of setting a timer.
How can I make this work?


Источник: https://stackoverflow.com/questions/781 ... is-resized
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Автопрокрутка QScrollArea при изменении размера содержащегося виджета
    Гость » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • Установка QScrollArea в качестве центрального виджета в Qt
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Qscrollarea.ensurewidgetvisible метод не показывает целевого виджета
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как сохранить фон SVG и выравнивание виджета при изменении размера?
    Anonymous » » в форуме C++
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Изображение сжимается при изменении размера браузера по высоте, но не при изменении ширины.
    Гость » » в форуме CSS
    0 Ответы
    182 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»