Qt

Динамическое создание виджетов Qt. QGridLayout

В этом сообщении хотелось бы немного отредактировать предыдущий подобный пост Qt. Динамическое создание виджетов на форме.

Задача такая же: Есть объект QGroupBox groupBox, в него надо запихнуть виджеты (labels & lineEdits) в QGridLayout лэйауте. Данные берутся из запроса (он представлен в сообщении по ссылке выше).

Более универсальный способ будет выглядеть так:

[pastacode lang=»cpp» manual=»if(ui-%3EgroupBox-%3Elayout())%20%7B%0A%09QLayoutItem%20*child%3B%0A%20%20%20%20while%20((child%20%3D%20ui-%3EgroupBox-%3Elayout()-%3EtakeAt(0))%20!%3D%200)%20%7B%0A%20%20%20%20%09delete%20child-%3Ewidget()%3B%0A%20%20%20%20%20%20%20%20delete%20child%3B%0A%20%20%20%20%7D%0A%20%20%20%20delete%20ui-%3EgroupBox-%3Elayout()%3B%0A%7D%0AQGridLayout%20*layout%20%3D%20new%20QGridLayout(ui-%3EgroupBox)%3B%0Aui-%3EgroupBox-%3EsetLayout(layout)%3B%0Aint%20pos%20%3D%200%3B%20%2F%2F%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%BE%D0%B2%20%D0%B2%200%0Aint%20colsCount%20%3D%202%3B%20%2F%2F%D0%9A%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BE%D0%BA%20%D0%B2%20%D0%BB%D1%8D%D0%B9%D0%B0%D1%83%D1%82%D0%B5%0Awhile%20(query.next())%20%7B%20%2F%2F%D0%B1%D0%B5%D1%80%D0%B5%D0%BC%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D1%8B%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%0A%09QLabel%20*newLabel%20%3D%20new%20QLabel(this)%3B%0A%20%20%20%20newLabel-%3EsetText(query.value(%22caption%22).toString()%2B%22%3A%22)%3B%0A%20%20%20%20newLabel-%3EsetObjectName(%22label_%22%2Bquery.value(%22name_%22).toString())%3B%0A%20%20%20%20layout-%3EaddWidget(newLabel%2Cpos%2FcolsCount%2Cpos%25colsCount)%3B%0A%20%20%20%20pos%2B%2B%3B%20%2F%2F%D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D0%B5%D0%BC%D1%81%D1%8F%0A%0A%20%20%20%20QLineEdit%20*newEdit%20%3D%20new%20QLineEdit(this)%3B%0A%20%20%20%20newEdit-%3EsetObjectName(query.value(%22name_%22).toString())%3B%0A%20%20%20%20layout-%3EaddWidget(newEdit%2Cpos%2FcolsCount%2Cpos%25colsCount)%3B%0A%20%20%20%20lineEdits.push_back(newEdit)%3B%0A%20%20%20%20pos%2B%2B%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

В данном случае мне необходимо было разместить объекты в бокс с двумя колонками. Поэтому colsCount = 2. Если их должно быть больше, то значение переменной нужно поменять. Очищение лэйаута позволяет при изменении результатов запроса все очистить и нарисовать все в соответствии с актуальными данными.