Bonjour,

Encore un problème... Un de plus.
J'utilise des formes, avec un modèle QSql(relational)TableModel en stratégie onManualSubmit, un mapping des champs avec QDataWidgetMapper, et des Widget qui m'affichent les données et me permettent de les modifier. Jusque là tout va bien.
Dans une de mes formes, figurent des données que je dois modifier par logiciel (coordonnées d'un point récupérées par pointage dans un widget). J'obtiens un QPoint, que j'enregistre dans deux champs AncreX et AncreY.
Voici le code qui les insère :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    case QDialog::Accepted :
        model->record(mapper->currentIndex()).field("AncreX").setValue(dlg.getPosition().x());
        ui->eX->setText(QString::number(dlg.getPosition().x()));
        ui->eX->setModified(true);
Idem pour AncreY.

Mon souci :
Si je modifie la valeur affichée dans le lineEdit eX au clavier, le submitAll déclenché par un bouton de ma forme enregistre la donnée dans la base.
La modification de la donnée dans eX apportée par le code ci-dessus n'est pas enregistrée lors du submitAll.

La seule solution pour finir par enregistrer, est d'encadrer mon setValue par un transaction/submitAll/commit. Cependant cela compromet le sens de ma stratégie d'enregistrement, et empêche l'utilisateur d'annuler une erreur.

Quelqu'un pourraît-il me dire s'il voit une raison au comportement curieux de ce bout de code?

Vous remerciant par avance pour une réponse

P.S. C'est un cas un peu général, en effet, lorsque j'enregistre des images je suis obligé de faire de même. Mais comme c'est du blob avec un comportement particulier, je me disais que ce n'était peut-être pas si anormal. Mais là c'est autre chose. Déjà d'après la doc, si je me rappelle bien, la ligne 2 devrait suffire à modifier et mon modèle, et mon LineEdit eX. Et être enregistré au submit.

Un edit pour compléter ma question :
- aucune des instructions lignes 2 et 3 ne fonctionne.
- Pour la ligne 3, je suppose que c'est parce que le widget est mappé vers la bdd. En effet, j'ai placé une instruction removeMapping avant et le widget a été mis à jour. Pas la base bien sur...
- Pour la ligne 2, je l'ai décomposée pour voir les valeurs : c'est bien le setValue qui ne fonctionne pas. Si je récupère la valeur après, elle est inchangée (setValue prend bien la nouvelle valeur en argument, c'est vérifié).

Donc ma demande se réduit à "Quelles sont les causes, en plus du fait que le record pourrait être readOnly, qui peuvent faire que setValue n'a aucun effet ?" Je précise que j'ai essayé avec un nom de champs faux (inexistant), ça plante l'appli...
Voila, Fin de l'edit, et merci encore pour votre attention.

A bientôt,
Cordialement,
M.P.