Qt小部件未正确放置

时间:2014-04-20 09:12:20

标签: qt qwidget qgridlayout

我已经将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);
}

当这两行被注释掉时,两个小部件水平放置。 这很好,但当我用另一个QGraphicsView取消注释时,它会填满整个窗口。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

LoupingWidget没有布局,因此当它添加到另一个布局时,布局无法根据其内容调整大小。您需要在QGridLayout构造函数中创建另一个布局(例如LoupingWidget),将topGroupBox添加到布局中,并将布局设置为LoupingWidget的布局。