mirx
mirx

Reputation: 626

QScrollArea inside QGroupBox, scrollbars instead of resizing QGroupBox

I want to have a QScrollArea inside QGroupBox, so when I add new widgets to group box its size stays the same, but I have scroll bars instead of resizing group box itself.

Here's my code:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtCore>
#include <QtGui>
#include <QLayout>
#include <QScrollArea>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGroupBox *box = new QGroupBox(QObject::tr("Example"));
    QScrollArea *sa = new QScrollArea;

    QGridLayout *gridLayout = new QGridLayout;
    QPushButton *b1 = new QPushButton("A");
    QPushButton *b2 = new QPushButton("B");
    QPushButton *b3 = new QPushButton("C");
    QPushButton *b4 = new QPushButton("D");
    QPushButton *b5 = new QPushButton("E");
    QPushButton *b6 = new QPushButton("F");
    QPushButton *b7 = new QPushButton("F");
    QPushButton *b8 = new QPushButton("F");
    QPushButton *b9 = new QPushButton("F");

    // addWidget(*Widget, row, column, rowspan, colspan)
    // 0th row
    gridLayout->addWidget(b1,0,0,1,1);
    gridLayout->addWidget(b2,0,1,1,1);
    gridLayout->addWidget(b3,0,2,1,1);

    // 1st row
    gridLayout->addWidget(b4,1,0,1,1);

    // 2nd row with 2-column span
    gridLayout->addWidget(b5,2,0,1,2);

    // 3rd row with 3-column span
    gridLayout->addWidget(b6,3,0,1,3);

    gridLayout->addWidget(b7,4,0,1,3);

    gridLayout->addWidget(b8,5,0,1,3);

    gridLayout->addWidget(b9,6,0,1,3);

    box->setLayout(gridLayout);
    sa->setWidget(box);

    setCentralWidget(sa);
}

MainWindow::~MainWindow()
{
    delete ui;
}

What I have now is that every time I add a new QPushButton, QGroupBox resizes, no matther there is a QScrollArea. What should I change to have the behaviour I want? Is it possible?

Upvotes: 2

Views: 1506

Answers (1)

HeyYO
HeyYO

Reputation: 2073

That's because you are putting the groupbox inside the scroll area. Scroll area doesn't restrict its childrens size.

You should do the opposite, put scrollarea inside group box. Here is how;

QWidget* sw = new QWidget();
sw->setLayout(gridLayout);
sa->setWidget(cont);
QVBoxLayout* bl = new QVBoxLayout(box);
bl->addWidget(sa);

setCentralWidget(box);

Note that if you are using toggle buttons (such as radio button) they will not act as a group. Because technically they are not in the same QGroupBox any more - they are inside the scroll area. You can provide group behavior using a QButtonGroup instance.

Upvotes: 2

Related Questions