为什么我的QGroupBox中没有出现我的QRadioButton?

时间:2014-07-13 19:06:20

标签: c++ qt

这是我的代码,它非常简单:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>

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

    QGroupBox* genderGroupBox = new QGroupBox("Gender", ui->centralWidget);
    QVBoxLayout* genderGroupBoxLayout = new QVBoxLayout(genderGroupBox);
    QRadioButton* maleRadioButton = new QRadioButton("Male", genderGroupBox);
    QRadioButton* femaleRadioButton = new QRadioButton("Female", genderGroupBox);

    genderGroupBoxLayout->addStretch();
}

但出于某种原因,我的程序看起来像这样:

program output

我已经在Qt编程了很多,我完全不知道为什么单选按钮没有显示在组框内。我已尝试使用

明确添加它们
genderGroupBoxLayout->addWidget(maleRadioButton);

并通过

手动添加布局
genderGroupBox->setLayout(genderGroupBoxLayout);

尽管由于它们是如何构建的,它们都不是必需的。看起来收音机按钮根本没有任何父母。

有人有什么想法吗?

我在Mac上使用Qt Creator 3.1.2进行编码。除了具有网格布局的centralWidget之外,.ui文件也是空的。

1 个答案:

答案 0 :(得分:1)

请参阅documentation

  

使用布局时,不需要传递父级   构建子窗口小部件。布局将自动重新显示   小部件(使用QWidget :: setParent())使它们成为子类   安装布局的小部件。

您的代码应如下所示:

QGroupBox* genderGroupBox = new QGroupBox("Gender");
QVBoxLayout* genderGroupBoxLayout = new QVBoxLayout;
QRadioButton* maleRadioButton = new QRadioButton("Male");
QRadioButton* femaleRadioButton = new QRadioButton("Female");

genderGroupBoxLayout->addWidget(maleRadioButton);
genderGroupBoxLayout->addWidget(femaleRadioButton);
genderGroupBoxLayout->addStretch();
genderGroupBox->setLayout(genderGroupBoxLayout);

ui->centralWidget->layout()->addWidget(genderGroupBox);