#include <QApplication>#include <QGridLayout>#include <QPushButton>#include <QHBoxLayout>#include <QResizeEvent>#include <QDebug>#include <QScrollArea>class ScrollArea : public QScrollArea{ Q_OBJECT public: ScrollArea(QWidget *p) : QScrollArea(p) {} protected: void resizeEvent(QResizeEvent *event) { qDebug() << event->size(); QScrollArea::resizeEvent(event); }};class MyWidget : public QWidget{ Q_OBJECT public: QGridLayout *l; ScrollArea *s; QHBoxLayout *layout; MyWidget() : QWidget() { move(0, 0); resize(400, 100); l = new QGridLayout(this); QPushButton *b = new QPushButton("Add", this); connect(b, SIGNAL(clicked()), this, SLOT(slotC())); s = new ScrollArea(this); l->addWidget(b, 0, 0, Qt::AlignCenter); l->addWidget(s, 1, 0); s->setWidget(new QWidget); layout = new QHBoxLayout(s->widget()); s->widget()->setLayout(layout); layout->setDirection(QBoxLayout::LeftToRight); } private slots: void slotC() { QWidget *w = new QPushButton("b1", s->widget()); w->setFixedWidth(50); w->show(); }};int main(int argc, char ** argv){ QApplication app(argc, argv); MyWidget *w = new MyWidget; w->show(); return app.exec();}#include "main.moc"
virtual void resizeContents(int w, int h);
#include <QApplication>#include <QGridLayout>#include <QPushButton>#include <QHBoxLayout>#include <QResizeEvent>#include <QDebug>#include <QScrollArea>class ScrollArea : public QScrollArea{ Q_OBJECT public: ScrollArea(QWidget *p) : QScrollArea(p) {} protected: void resizeEvent(QResizeEvent *event) { //qDebug() << event->size(); QScrollArea::resizeEvent(event); }};class MyWidget : public QWidget{ Q_OBJECT public: QGridLayout *l; ScrollArea *s; QHBoxLayout *layout; MyWidget() : QWidget() { move(0, 0); resize(400, 100); l = new QGridLayout(this); QPushButton *b = new QPushButton("Add", this); connect(b, SIGNAL(clicked()), this, SLOT(slotC())); s = new ScrollArea(this); l->addWidget(b, 0, 0, Qt::AlignCenter); l->addWidget(s, 1, 0); s->setWidget(new QWidget); connect(this, SIGNAL(layoutChanged()), SLOT(updateLayout()), Qt::QueuedConnection); layout = new QHBoxLayout(s->widget()); s->widget()->setLayout(layout); layout->setDirection(QBoxLayout::LeftToRight); } signals: void layoutChanged(); private slots: void slotC() { QWidget *w = new QPushButton("b1", s->widget()); s->widget()->layout()->addWidget(w); w->show(); emit layoutChanged(); } void updateLayout() { // This is workaround when using QScrollArea::setWidget(...) // and different widget creation order. // For more details, please see a bug #103525 on Trolltech Task Tracker: // http://trolltech.com/developer/task-tracker int h = s->widget()->sizeHint().height(); int w = s->widget()->sizeHint().width(); s->widget()->resize(w, h); }};int main(int argc, char ** argv){ QApplication app(argc, argv); MyWidget *w = new MyWidget; w->show(); return app.exec();}#include "main.moc"
answersScrollArea=new QScrollArea;QWidget *widget=new QWidget;answersLayout=new QVBoxLayout;answersLayout->addStretch(1);slotAddAnswer();widget->setLayout(answersLayout);answersScrollArea->setWidget(widget);answersScrollArea->setWidgetResizable(true);