Qt — Невозможно получить доступ к динамически создаваемым виджетам QHBoxLayout

При нажатии кнопки я создаю QHBoxLayout и добавляю к нему три виджета (комбинированный список и два спинбокса). Затем я добавляю созданный QHBoxLayout в вертикальный макет, уже определенный в представлении Qt Design.

В другом методе я хочу получить доступ к каждому из этих определенных QHBoxLayouts и получить значения от каждого из их комбинированных списков и спин-боксов. Итерируя по каждому из QHBoxLayouts, я вижу, что внутри каждого макета действительно есть 3 «вещи» (используя метод count ()), однако я не могу получить к ним доступ и всегда получаю пустой набор результатов при попытке найти детей макета.

//In the on click method I am doing the following

QHBoxLayout *newRow = new QHBoxLayout();

QComboBox *animCombo = new QComboBox();
QSpinBox *spinStart = new QSpinBox();
QSpinBox *spinEnd = new QSpinBox();

newRow->addWidget(animCombo);
newRow->addWidget(spinStart);
newRow->addWidget(spinEnd);

ui->animLayout->addLayout(newRow); //animLayout is a vert layout//in another method, I want to get the values of the widgets in the horiz layouts

foreach( QHBoxLayout *row, horizLayouts ) {

qDebug() << row->count(); //outputs 3 for each of the QHBoxLayouts

}

Любая помощь очень ценится, спасибо!

2

Решение

Вы можете использовать следующую функцию:

QLayoutItem * QLayout :: itemAt (int index) const [чисто виртуальный]

Итак, я бы написал что-то вроде этого:

for (int i = 0; i < row.count(); ++i) {
QWidget *layoutWidget = row.itemAt(i))->widget();
QSpinBox *spinBox = qobject_cast<QSpinBox*>(layoutWidget);
if (spinBox)
qDebug() << "Spinbox value:" << spinBox->value();
else
qDebug() << "Combobox value:" << (qobject_cast<QComboBox*>(layoutWidget))->currentText();
}

Отказ от ответственности: это просто псевдокод для представления идеи.

1

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


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