【问题标题】:children().count() of QGroupBox returns value more than expectedQGroupBox 的 children().count() 返回值超出预期
【发布时间】:2015-11-17 10:58:41
【问题描述】:

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

当您使用布局时,您在构造子小部件时不需要传递父级。布局将自动重新设置小部件的父级(使用 QWidget::setParent()),以便它们是安装了布局的小部件的子级。

我使用 QDesigner 创建了五个 QPushButton 和一个 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" 

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

【问题讨论】:

  • 使用QObject::findChildren 仅获取按钮。
  • 这与获取按钮无关。我试图找出为什么我要生 6 个孩子而不是 5 个。
  • 可能是因为你得到了 1 个布局子元素 + 5 个按钮子元素?~ 设置 QGridLayout.objectName = "xxx" 并再次运行它,那么你应该在第一个位置得到 xxx ?

标签: c++ qt qgroupbox


【解决方案1】:

执行以下操作:

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

你会看到一个孩子是QGridLayout

或者:

grd->setObjectName("GridLayout");

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2014-12-01
    • 2015-11-17
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多