В этом сообщении хотелось бы немного отредактировать предыдущий подобный пост Qt. Динамическое создание виджетов на форме.
Задача такая же: Есть объект QGroupBox groupBox, в него надо запихнуть виджеты (labels & lineEdits) в QGridLayout лэйауте. Данные берутся из запроса (он представлен в сообщении по ссылке выше).
Более универсальный способ будет выглядеть так:
if(ui->groupBox->layout()) {
QLayoutItem *child;
while ((child = ui->groupBox->layout()->takeAt(0)) != 0) {
delete child->widget();
delete child;
}
delete ui->groupBox->layout();
}
QGridLayout *layout = new QGridLayout(ui->groupBox);
ui->groupBox->setLayout(layout);
int pos = 0; //устанавливаем позицию расположения виджетов в 0
int colsCount = 2; //Количество колонок в лэйауте
while (query.next()) { //берем результаты запроса
QLabel *newLabel = new QLabel(this);
newLabel->setText(query.value("caption").toString()+":");
newLabel->setObjectName("label_"+query.value("name_").toString());
layout->addWidget(newLabel,pos/colsCount,pos%colsCount);
pos++; //сдвигаемся
QLineEdit *newEdit = new QLineEdit(this);
newEdit->setObjectName(query.value("name_").toString());
layout->addWidget(newEdit,pos/colsCount,pos%colsCount);
lineEdits.push_back(newEdit);
pos++;
}
В данном случае мне необходимо было разместить объекты в бокс с двумя колонками. Поэтому colsCount = 2. Если их должно быть больше, то значение переменной нужно поменять. Очищение лэйаута позволяет при изменении результатов запроса все очистить и нарисовать все в соответствии с актуальными данными.
Понравилось это:
Нравится Загрузка...
Похожие записи
Динамическое создание виджетов Qt. QGridLayout: 1 комментарий