Qt - 无法访问动态创建的QHBoxLayout小部件

时间:2014-07-21 22:02:36

标签: c++ qt qt4 qtgui qlayout

按下按钮,我正在创建一个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

}

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下功能:

QLayoutItem * QLayout::itemAt(int index) const [pure virtual]

所以,我会写这样的东西:

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();
}

免责声明:这只是代表这个想法的伪代码。