如何遍历QGridLayout中的每个QSpinBox

时间:2014-04-27 11:01:28

标签: c++ visual-studio-2010 qt

我有以下问题。我在最新版本5.2中使用Qt,在我的代码中我有11 QSpinBox。每个都在QGridLayout。我想遍历此布局中的每个QSpinBox并设置我从文件中读取的值。当我使用时:

ui.QSpinBox->setValue()

一切都好,但代码看起来太长了。 我尝试使用:

static_cast<QSpinBox*>(ui.gridLayout->itemAtPosition(1,1)->widget())->setValue(100);

但我得到异常访问冲突,MS VS2010在qatomic_mscv.h中显示了这个函数:

inline bool QAtomicOpsBySize<4>::deref(long &_q_value) Q_DECL_NOTHROW
{
    return QT_INTERLOCKED_DECREMENT(&_q_value) != 0;
}

所以我想过不使用指向QSpinBox的指针而是一个对象:

static_cast<QSpinBox>(ui.gridLayout->itemAtPosition(1,1)->widget()).setValue(100);

但它没有改变价值。没有发生任何例外。

好的,我甚至使用了带指针类型的dynamic_cast,我再次访问Violation但这次VS2010

指向qscopedpointer.h:

inline T *data() const
    {
        return d;
    }

也适用于qobject_cast

我确定这个位置指向QSpinBox。我做错了什么?

1 个答案:

答案 0 :(得分:1)

请考虑使用qFindChildren

QList<QSpinBox*> spinBoxen = ui.findChildren<QSpinBox*>();
Q_FOREACH(QSpinBox *spinBox, spinBoxen) {
    // do something to do the spinBox
}