J'utilise depuis peu, mais avec bonheur, QxOrm.
C'est une bibliothèque dans laquelle je retrouve une façon facile de remplacer les fonctionnalités
de ma bibliothèque concoctée par 30 ans d'expérience sur des logiciels "métiers" à base
de DAO (pour les bases) et de COM (pour servir sur le réseau les objets d'application)
J'ai "bricolé" avec QxOrm une application BaseAgri qui tourne très bien (après quelques adaptation à
cette culture "Linux(Ubuntu)/Qt/model-view/..." nouvelle pour moi), mais dans laquelle, pour commencer,
je n'ai pas exprimé les relations (dans mes objets, la relation à un autre objet est un "long IdXXX"
de l'IdObj -clé primaire- dans l'autre table, et apparaît donc comme un nombre dans les colonnes de
l'interface utilisateur -et les "model/view", ...-)
(toutes mes relations sont ici des "n-1" vues des objets, et des interfaces utilisateurs; la seule
exception est "interne", quand l'utilisateur demande à supprimer, une définition d'unité de mesure
par exemple, je dois savoir si elle est utilisée quelque part pour ne pas supprimer)
J'ambitionne maintenant de passer à l'expression des relations par des pointeurs d'objets et des listes.
A cette occasion, je fais entrer QxEE dans le manège.
Et là, dur-dur ... je dois manquer de culture pour faire les liens entre ce que me génère QxEE et
Qt/model-view/... (le nom de mon projet dans QxEE est BaseAgri -fichier BaseAgri.qxee-)
J'obtiens une erreur de compilation parce que "BaseAgri_export.gen.h" n'existe pas.
J'ai suivi la démarche:
- Faire un projet QT BaseAgri d'application Widgets vide (avec seulement une mainwindow)
(dans le répertoire "AteliersLogiciels/BaseAgri")
- Paramétrer QxEE pour "Export C++ model/view project" (le seul qui m'interesse -a priori-)
(vers le répertoire "AteliersLogiciels/BaseAgri/QxModel")
- Paramétrer QxEE pour "Export C++ project" (parce qu'il apparait en grisé dans celui de dessus
(vers le répertoire "AteliersLogiciels/BaseAgri/QxBase"; il n'accepte pas que ce soit le même -très bien!-)
- Exporter avec "Export C++ model/view project"
- Compiler donne l'erreur "../../QxBase/include/BaseAgri_export.gen.h n'existe pas"; bien noter qu'"il"
cherche dans QxBase et pas QxModel.
- Exporter avec "Export C++ project" (esperant que QxBase ne soit plus vide)
- J'ai toujours la même erreur (logique car toujours QxBase vide)
Accessoirement, je donne ici une liste des "astuces" que j'ai du utiliser pour contourner des contraintes
(dans le projet qui fonctionne sans l'expression des relations) pour le cas où il y aurait des façons
moins contraignantes et surtout plus élégantes de faire; si je dois plutôt ouvrir un trait pour
chaque point, je pourrai le faire progressivement:
- dans la template d'une classe (dans oCulture.cpp par exemple), le "t.data" du "Libelle" à la fin de la liste
si je veux que le "StrechLast" d'une tableView s'applique au libellé; je n'ai pas réussi à reclasser
les colonnes du "model" avec "modelSchemas->setListOfColumns(lstCol);"
où "modelSchemas = new qx::QxModel<oCulture>();" (seulement à sélectionner ce qui intéresse l'iu).
Code:
A noter que cela peut être une contrainte majeure: j'ai pour habitude, pour la santé des bases et la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // Les volets du bureau QStringList lstCol; QStringList lstHdr; QList<int> lrgCol; QHash<QString,QString> tmpHash; query="WHERE KType="; // Le Volet "Schémas de culture" // Create a model for oCulture/Schemas and fetch data from database modelSchemas = new qx::QxModel<oCulture>(); lstCol << "Abrege" << "dtDebut" << "dtFinPrevue" << "NbUeK_Rang" << "Sem_Plant_Rang" << "idUniteSem_Plant" << "Prod_Rang" << "idUniteProd" << "Libelle"; lstHdr << "Abrégé" << "Déb." << "Fin" << "nU" << "SemPl" << "Unité" << "Prd" << "Unité" << "Libellé"; lrgCol << 55 << 40 << 40 << 40 << 40 << 50 << 40 << 50 << 80; for(int i=0; i<lstHdr.count(); i++) tmpHash.insert(lstCol[i],lstHdr[i]); modelSchemas->setListOfColumns(lstCol); modelSchemas->setListOfHeaders(tmpHash); if(!modelSchemas->qxFetchByQuery_(query+QString::number(KType_Schema))) {qDebug() << "err: Schemas";} ui->tableViewSchemas->setModel(modelSchemas); for(int i=0; i<lrgCol.count(); i++) ui->tableViewSchemas->setColumnWidth(i,lrgCol[i]); ui->tableViewSchemas->show();
"versionalisation", de toujours rajouter les nouveaux champs à la fin (ce que cette astuce contredit)
- ... (j'arrête pour aujourd'hui; il vaut mieux que j'ouvre un trait pour chaque point ...)
Partager