c++ - QGroupBox 的 children().count() 返回值超过预期

标签 c++ qt qgroupbox

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

When you use a layout, you do not need to pass a parent when constructing the child widgets. The layout will automatically reparent the widgets (using QWidget::setParent()) so that they are children of the widget on which the layout is installed.

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

然后我尝试检查 groupbox 的子项。但它显示了 6 个 child 而不是 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" 

谁能告诉我为什么 children().count() 等于 6 而不是 5?

最佳答案

执行以下操作:

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

你会看到一个 child 是QGridLayout

或者:

grd->setObjectName("GridLayout");

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

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

关于c++ - QGroupBox 的 children().count() 返回值超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755204/

相关文章:

c++ - 在带有转换运算符的初始化程序的情况下,复制列表初始化的假定行为是什么?

c++ - 无法将 vector 输出到 .txt 文件

c++ - Qt - 如何处理对话框的内存管理?

c++ - QScrollArea 中没有显示任何内容

c++ - 如何使 C++ 宏表现得像函数?

C++ 第一次使用函数

c++ - 如何从保存的几何图形中获取屏幕编号?

qt - 布局 : How to make one widget 3x the rest in a vertical layout

c++ - QGroupBox 单击/焦点

python - 根据列表有条件地创建组框