Я тестирую следующий пункт документации 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?
Сделайте следующее:
qDebug() << "Class name:" << button->metaObject()->className();
и вы увидите, что один ребенок является QGridLayout
Или в качестве альтернативы:
grd->setObjectName("GridLayout");
И имя должно отображаться вместо пустой строки
Что это значит: макет виджета становится дочерним для виджета.
Других решений пока нет …