Доброго времени суток, заранее извиняюсь за такой избитый вопрос.
На виджет scroll area по кнопке добавляются group box'ы. Поковырявшись, я вроде понял как это делается, но вопрос в следующем. Как мне ограничить scroll area по высоте? Виджет так и должен увеличиваться, как я понимаю, но с определенной высоты уходить в область прокрутки. На деле по мере нажатий - увеличивается, один groupbox уходит в прокрутку, потом scroll area тоже начинает увеличиваться. Пробовал:
setMaximumHeight() для scroll area - вообще не понял, scroll area уехало вниз, залезло на кнопку 

sizeHint() переопределял в классе виджета, чтобы он больше некоторой высоту не возвращал. не работает
QSizePolicy для виджета игрался - не помогло
C++ (Qt)
#include <QDialog>
#include <QGridLayout>
#include <QPushButton>
#include <QScrollArea>
#include <QMessageBox>
 
#include <testwidget.h>
 
class DialogTest : public QDialog
{
    Q_OBJECT
 
protected slots:
    void addBox();
public:
    explicit DialogTest(QWidget *parent = 0);
 
private:
    TestWidget *testWidget;
    QPushButton *pushButton;
    QScrollArea *scrollArea;
};
 
DialogTest::DialogTest(QWidget *parent) :
    QDialog(parent)
{
    pushButton = new QPushButton(this);
    scrollArea = new QScrollArea(this);
    QGridLayout *gridLayout = new QGridLayout(this);
    gridLayout->addWidget(scrollArea);
    gridLayout->addWidget(pushButton);
    testWidget = new TestWidget(this);
    testWidget->addBox();
    scrollArea->setWidget(testWidget);
 
    connect(pushButton, SIGNAL(clicked()),
            this, SLOT(addBox()));
    adjustSize();
}
 
void DialogTest::addBox()
{
    testWidget->addBox();
    scrollArea->setMinimumSize(testWidget->layout()->sizeHint());
 
}
C++ (Qt)
#include <QWidget>
#include <QGroupBox>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
 
class TestWidget : public QWidget
{
    Q_OBJECT
public:
    explicit TestWidget(QWidget *parent = 0);
    void addBox();
    virtual QSize sizeHint() const;
 
signals:
 
public slots:
 
private:
    QGroupBox* boxConstructor();
 
};
 
TestWidget::TestWidget(QWidget *parent) :
    QWidget(parent)
{
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
    setLayout(layout);
}
 
QGroupBox* TestWidget::boxConstructor()
{
    QGroupBox *newBox = new  QGroupBox;
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(new QLabel("Test"), 0, 0);
    layout->addWidget(new QLabel("Test"), 1, 0);
    layout->addWidget(new QLabel("Test"), 2, 0);
    QComboBox *combo1 = new QComboBox;
    QComboBox *combo2 = new QComboBox;
    QComboBox *combo3 = new QComboBox;
    QComboBox *combo4 = new QComboBox;
    layout->addWidget(combo1, 0, 1);
    layout->addWidget(combo2, 1, 1);
    layout->addWidget(combo3, 0, 2);
    layout->addWidget(combo4, 1, 2);
    layout->addWidget(new QPushButton("Test"), 2, 2);
    layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
    newBox->setLayout(layout);
    return newBox;
}
 
void TestWidget::addBox()
{
    QGroupBox* box = boxConstructor();
    layout()->addWidget(box);
}
 
QSize TestWidget::sizeHint() const
{
    QSize size = QWidget::sizeHint();
    if (size.height() > 300 )
        size.setHeight(300);
    return size;
}