2014-04-27 4 views
0

J'ai le problème suivant. J'utilise Qt dans la nouvelle version 5.2 et dans mon code j'ai 11 QSpinBox. Tous au QGridLayout. Je veux itérer à travers chaque QSpinBox dans cette mise en page et définir la valeur que j'ai lu à partir du fichier. Quand j'utilise:Comment parcourir chaque QSpinBox dans QGridLayout

ui.QSpinBox->setValue() 

Tout va bien, mais le code semble trop long. J'ai essayé d'utiliser:

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

mais je reçois violation d'exception d'accès et MS VS2010 me montrer cette fonction qatomic_mscv.h:

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

Alors je pensais à ne pas utiliser le pointeur pour QSpinBox mais un objet:

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

mais cela n'a pas changé la valeur. Aucune exception ne s'est produite.

OK, j'ai utilisé même avec dynamic_cast type pointeur et je me suis à nouveau accès Violation mais cette fois VS2010

point

me qscopedpointer.h:

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

Il arrive pour qobject_cast aussi.

Je suis sûr que ce point de position à QSpinBox. Qu'est-ce que je fais mal?

Répondre

1

Pensez à utiliser à la place qFindChildren:

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