按下按钮时,我正在创建QHBoxLayout并向其中添加三个小部件(combobox和两个spinbox)。然后,将创建的QHBoxLayout添加到Qt Design View 中已定义的垂直布局中。
在另一种方法中,我想访问每个已定义的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
}
非常感谢任何帮助,谢谢!
最佳答案
您可以使用以下功能:
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();
}
免责声明:这只是表示想法的伪代码。