Доброго времени суток, заранее извиняюсь за такой избитый вопрос.
На виджет 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;
}