QGroupBox的children()。count()返回的值超过预期值

时间:2015-11-17 10:58:42

标签: c++ qt qgroupbox

我正在测试Qt文档的以下几点。

  

使用布局时,在构造子窗口小部件时不需要传递父窗口。布局将自动重新显示窗口小部件(使用QWidget :: setParent()),以便它们是安装布局的窗口小部件的子窗口。

我使用QDesigner创建了五个QPushButtons和一个QGroupbox。然后我将这些按钮添加到QGridLayout并将其设置为groupbox的布局。

然后我试着检查groupbox的孩子们。但它显示了6个孩子而不是5个。一个是空的,另一个是按钮。

这是我的代码。

QGridLayout *grd = new QGridLayout();
grd->addWidget(ui->pushButton,0,0);
grd->addWidget(ui->pushButton_2,0,1);
grd->addWidget(ui->pushButton_3,1,0,1,3);
grd->addWidget(ui->pushButton_4,2,0);
grd->addWidget(ui->pushButton_5,2,1);

ui->groupBox->setLayout(grd);

qDebug() << ui->groupBox->children().count();

foreach (QObject *button, ui->groupBox->children())
{
    qDebug() << "obj name" << button->objectName();
    QPushButton *push_button = qobject_cast<QPushButton *>(button) ;
    if(push_button)
    {
        qDebug() << push_button->text();
    }
}

我得到的结果。

6 
obj name "" 
obj name "pushButton" 
"button 1" 
obj name "pushButton_2" 
"button 2" 
obj name "pushButton_3" 
"button 3" 
obj name "pushButton_4" 
"button 4" 
obj name "pushButton_5" 
"button 5" 

任何人都可以告诉我为什么child()。count()等于6而不是5?

1 个答案:

答案 0 :(得分:1)

执行以下操作:

qDebug() << "Class name:" << button->metaObject()->className();

您会看到一个孩子是QGridLayout

或者:

grd->setObjectName("GridLayout");

名称应显示在空字符串的位置

这是什么意思:小部件的布局成为小部件的子级。