Виджеты Qt размещены неправильно

Я подкласс QWidget и определил конструктор следующим образом:

LoupingWidget::LoupingWidget(QWidget *parent): QWidget(parent)
{
    QGroupBox *topGroupBox = new QGroupBox(this);

    QGraphicsView *xRGBPlot = new QGraphicsView(this);
    QGraphicsView *yRGBPlot = new QGraphicsView(this);
    QGraphicsView *loupe = new QGraphicsView(this);
    QSlider *slider = new QSlider(this);

    QGridLayout *boxGLayout = new QGridLayout;
    boxGLayout->addWidget(xRGBPlot, 0, 0);
    boxGLayout->addWidget(slider, 0, 1);
    boxGLayout->addWidget(loupe, 1, 0);
    boxGLayout->addWidget(yRGBPlot, 1, 1);

    topGroupBox->setLayout(boxGLayout);
}

Далее я пытаюсь добавить его в QDialog:

Window::Window(QWidget *parent): QDialog(parent)
{
    LoupingWidget *firstLoupindWidget = new LoupingWidget(this);
    LoupingWidget *secondLoupindWidget = new LoupingWidget(this);
//  QGraphicsView *mainPicture  = new QGraphicsView(this);

    QGridLayout *gridLayout = new QGridLayout;
//    gridLayout->addWidget(mainPicture, 0, 0);
    gridLayout->addWidget(firstLoupindWidget, 1, 0);
    gridLayout->addWidget(secondLoupindWidget, 1, 1);
    setLayout(gridLayout);
}

Когда эти две строки закомментированы, два виджета располагаются горизонтально. И это хорошо, но когда я раскомментирую строки с другим QGraphicsViews, он заполняет все окно.

Что я делаю неправильно?

1 ответ

Решение

LoupingWidget не имеет макета, поэтому при добавлении в другой макет макет не может изменить его размер в соответствии с его содержимым. Вам нужно создать другой макет (например, QGridLayout) в LoupingWidget конструктор, добавить topGroupBox к макету и установите макет как LoupingWidgetмакет.

Другие вопросы по тегам