У меня есть 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()
Код: Выделить всё
maximum
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