2015-11-15 2 views
1

Я хочу иметь QScrollArea внутри QGroupBox, поэтому, когда я добавляю новые виджеты в группу, размер остается прежним, но у меня есть полосы прокрутки, а не изменение размера группы.QScrollArea внутри QGroupBox, полосы прокрутки вместо изменения размера QGroupBox

Вот мой код:

#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; 
} 

То, что я сейчас, что каждый раз, когда я добавить новый QPushButton, QGroupBox изменяет, не matther не является QScrollArea. Что я должен изменить, чтобы иметь поведение, которое я хочу? Является ли это возможным?

ответ

2

Это потому, что вы помещаете групповой ящик в область прокрутки. Область прокрутки не ограничивает размер его дочерних элементов.

Вы должны сделать наоборот, поместите scrollarea внутри группового окна. Вот как;

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

setCentralWidget(box); 

Обратите внимание, что если вы используете кнопки переключения (например, переключатель), они не будут действовать как группа. Потому что технически они уже не в одном QGroupBox - они находятся внутри области прокрутки. Вы можете обеспечить групповое поведение с использованием экземпляра QButtonGroup.

+0

Changedit, как вы сказали: http://pastie.org/private/n18c4xrsruu693io9x8r6g, но все же нет доступных полос прокрутки. Что я делаю неправильно? – mirx

+1

'setCentralWidget (sw);' -> 'setCentralWidget (поле);' – HeyYO

+0

Спасибо. Но возможно ли иметь, скажем, 2 или 3 'QGroupBox', один рядом с другим в макете сетки, с' QScrollArea' внутри? Почему-то я не знаю, как это сделать. – mirx

Смежные вопросы