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

Posted

技术标签:

【中文标题】Qt - 无法访问动态创建的 QHBoxLayout 小部件【英文标题】:Qt - Can't access dynamically created QHBoxLayout widgets 【发布时间】:2014-07-21 22:02:36 【问题描述】:

按下按钮时,我正在创建一个 QHBoxLayout 并向其添加三个小部件(组合框和两个旋转框)。然后我将创建的 QHBoxLayout 添加到已经在 Qt 设计视图中定义的垂直布局中。

在另一种方法中,我想访问每个定义的 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】:

您可以使用以下功能:

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

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

【讨论】:

太棒了。谢谢,非常感谢!

以上是关于Qt - 无法访问动态创建的 QHBoxLayout 小部件的主要内容,如果未能解决你的问题,请参考以下文章

用 Qt实现三个窗口,一个label,两个button,

Qt无法从继承类访问*ui指针

Qt DLL总结-创建及调用QT的 DLL(三篇)good

动态创建的组件无法访问父属性

单击按钮后无法访问动态创建的文本框的文本

c#winForm动态创建文件夹访问被拒绝