children (). count () из QGroupBox возвращает значение больше ожидаемого

Я тестирую следующий пункт документации Qt.

Когда вы используете макет, вам не нужно передавать родительский элемент при создании дочерних виджетов. Макет автоматически перерисовывает виджеты (используя QWidget :: setParent ()), чтобы они были дочерними элементами виджета, на котором установлен макет.

Я создал пять QPushButtons и один QGroupbox, используя QDesigner. Затем я добавляю эти кнопки в QGridLayout и устанавливаю это как макет группы.

Затем я попытался проверить детей группы. Но это показывает 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?

0

Решение

Сделайте следующее:

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

и вы увидите, что один ребенок является QGridLayout

Или в качестве альтернативы:

grd->setObjectName("GridLayout");

И имя должно отображаться вместо пустой строки

Что это значит: макет виджета становится дочерним для виджета.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]