我有以下问题。我在最新版本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。我做错了什么?
最佳答案
考虑改用qFindChildren:
QList<QSpinBox*> spinBoxen = ui.findChildren<QSpinBox*>();
Q_FOREACH(QSpinBox *spinBox, spinBoxen) {
// do something to do the spinBox
}