Ich habe folgende Situation: eine QScrollArea enthält ein QWidget mit QVBoxLayout. Das innere Widget enthält viele QPushButtons. Wenn ich auf einen Button klicke, soll ein neuer ganz am Ende angefügt werden und die QScrollArea soll ganz runter gescrollt werden.
Problem: zu dem Zeitpunkt, wo ich die verticalScrollBar() verschiebe, ist ihr maximum()-Wert noch der alte. So scrollt die QScrollArea nur bis zum vorletzten Button runter.
Interessanterweise funktionierts, wenn ich eine QMessageBox anzeige, direkt vor dem Code der runterscrollt...
Hier ist der Code:
Header:
Code: Alles auswählen
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
private:
QScrollArea* scroll;
public slots:
void trigger();
};Code: Alles auswählen
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent) {
// set up QScrollArea containig one "vboxed" QWidget
scroll = new QScrollArea(this);
QWidget* innerWidget = new QWidget(scroll);
innerWidget->setLayout(new QVBoxLayout());
scroll->setWidget(innerWidget);
scroll->setWidgetResizable(true);
// set up outer layout containing QScrollArea
QLayout* outerLayout = new QVBoxLayout();
outerLayout->addWidget(scroll);
setLayout(outerLayout);
// add 1st QPushButton
trigger();
}
// add PushButton at bottom of VBox
// scroll down (<<<<< doesn't work)
void MyWidget::trigger() {
QPushButton* bt = new QPushButton("push me", scroll->widget());
connect(bt, SIGNAL(clicked()), this, SLOT(trigger()));
scroll->widget()->layout()->addWidget(bt);
QMessageBox::warning(NULL, "", ""); // <<<<< if enabled, it works
scroll->verticalScrollBar()->setValue(scroll->verticalScrollBar()->maximum());
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}System: Debian Linux, gcc 4.2.3, QT 4.3.3
Tschüs,
Jonas