IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QxOrm Discussion :

QAssert "exist(key)" en quittant l'appli


Sujet :

QxOrm

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations forums :
    Inscription : Août 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut QAssert "exist(key)" en quittant l'appli
    Bonjour,

    en quittant l'application,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASSERT: "exist(key)" in file c:\dev\projets\qxorm\include\qxcollection\../../inl/QxCollection/QxCollection.inl, line 274
    est déclenché si j'exécute la fonction suivante dans mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void RetroAnalyseDatabase::testCommune()
    {
        ptr_commune comm = ptr_commune(new domain::collectivite::commune());
        comm->setCommune("RIOZ");
        qx::dao::fetch_by_id(comm);
        qDebug() << comm->getInsee();
        qx::dump(comm);
    }
    ptr_commune est un typedef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef qx::dao::ptr<domain::collectivite::commune> ptr_commune;
    Ais-je oublié quelque chose ?

    Après analyse, il semblerais que key = QObject.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut


    Est-ce que c'est lié à la nouvelle version (1.1.9) ?
    Tu n'avais pas ce problème avec la version 1.1.8 ?

    Voici le code qui déclenche l'assert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <typename Key, typename Value>
    inline bool QxCollection<Key, Value>::removeByKey(const Key & key)
    {
       qAssert(exist(key));
       return (m_qxCollection.template get<1>().erase(key) > 0);
    }
    Donc en fait, le programme essaye d'effacer un élément de la collection avec une clé qui n'existe pas.

    Lorsque tu quittes ton appli, QxOrm efface tous les singletons en mémoire pour éviter d'avoir des traces de fuite mémoire si tu utilises un outil pour ça (Valgring par exemple).

    Tu peux donc mettre un point d'arrêt dans la fonction suivante qui est appelée automatiquement lorsque tu quittes ton appli (fichier './src/QxSingleton/QxSingletonX.cpp') :
    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
    void QxSingletonX::deleteAllSingleton()
    {
       QMutexLocker locker(QCoreApplication::instance() ? (& m_oMutexSingletonX) : NULL);
       m_bOnClearSingletonX = true;
     
       _foreach(IxSingleton * pSingleton, m_mapSingletonX)
       {
          if (pSingleton && (pSingleton != QxSingletonX::getSingleton()))
             pSingleton->deleteInstance();
       }
     
       QxSingletonX::deleteSingleton();
       m_mapSingletonX.clear();
       m_bOnClearSingletonX = false;
    }
    Je pense que l'assert doit se déclencher à ce niveau.

    Sinon, ton code me semble correct.
    Est-ce que tu as le même problème lorsque tu exécutes les exemples du dossier './test/' de la distribution QxOrm ?
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations forums :
    Inscription : Août 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Je viens de recompiler avec la version 1.1.8, et j'ai pas ce problème.

    Avec la nouvelle version 1.1.9, ça recommence.

    Voici la liste des m_sKeySingleton des pSingleton pour lesquels pSingleton->deleteInstance() est invoqué :
    "qx::QxSingletonX"
    "qx::QxClass_domain.collectivite.commune"
    "qx::QxDataMemberX_QObject"
    "qx::QxClass_QObject" c'est lui qui déclenche QAssert
    "qx::QxSqlDatabase"
    "qx::QxFactoryX"
    "qx::QxDataMemberX_domain.collectivite.commune"
    "qx::QxClassX"

    Et ceux si je lance et ferme l'appli sans utiliser d'appels à la BDD :
    "qx::QxSingletonX"
    "qx::QxSqlDatabase"
    "qx::QxFactoryX"

    J'ai déposé un point d'arrêt sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool QxSingletonX::addSingleton(const QString & sKey, IxSingleton * pSingleton)
    et j'ai remonté la pile pour trouver le coupable qui instanciait le singleton QxClass_QObject et c'est
    qx::QxClass<domain::collectivite::commune>::init
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_eDaoStrategy = QxClass<typename QxClass<T>::type_base_class>::getSingleton()->getDaoStrategy();
    Je précise que domain::collectivite::commune hérite de QObject et est enregistré dans le contexte par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    QX_REGISTER_PRIMARY_KEY(domain::collectivite::commune, QString)
    QX_REGISTER_COMPLEX_CLASS_NAME_HPP_SYNERGIE(domain::collectivite::commune, QObject, 1, domain_collectivite_commune)
     
    // et aussi
    template <> void register_class(QxClass<domain::collectivite::commune> &t)
        {
        IxDataMember * pData = NULL;
    //    IxFunction * pFct = NULL;
     
          t.setName("commune");
          pData = t.id(& domain::collectivite::commune::m_commune, "commune");
          pData = t.data(& domain::collectivite::commune::m_insee, "insee");
          pData = t.data(& domain::collectivite::commune::m_centreBourg, "centrebourg");
        }
    J'ai déposé un point d'arrêt sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool QxSingletonX::removeSingleton(const QString & sKey)
    J'ai activé _QX_USE_TRACE_CONSTRUCTOR_DESTRUCTOR et rien d'anormal, voici la sortie :
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_QObject'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_QObject'

    ...


    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_QObject'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_QObject'
    ASSERT: "exist(key)" in file c:\dev\projets\qxorm\include\qxcollection\../../inl/QxCollection/QxCollection.inl, line 274
    [QxOrm] qx::IxSingleton destructor 'qx::QxSqlDatabase'
    [QxOrm] qx::IxSingleton destructor 'qx::QxFactoryX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxSingletonX'

    Je comprends pas trop

    'qx::QxClass_QObject' ne serait'il pas supprimé en cascade par par 'qx::QxDataMemberX_QObject' dabord ?

    Ps : les tests fonctionnent, mais je crois pas que les classes persistantes dérivent de QObject...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Ps : les tests fonctionnent, mais je crois pas que les classes persistantes dérivent de QObject...
    Si il y en a 2 dans le projet ./test/qxDllSample/dll1/ : CPerson et TestQtProperty. Et on fait bien des appels à la BDD avec ces 2 classes quand on exécute le main.

    'qx::QxClass_QObject' ne serait'il pas supprimé en cascade par par 'qx::QxDataMemberX_QObject' dabord ?
    C'est peut-être ça, je ne sais pas.

    L'idéal serait que je puisse reproduire ce problème.
    Est-ce que tu pourrais fournir la définition de ta classe 'domain::collectivite::commune' stp ?

    EDIT : je pense savoir d'où ça vient.
    Dans le fichier QxClass.inl, ligne 181, si tu supprimes 'm_sKey = "QObject";', est-ce que l'assert se déclenche toujours ?
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations forums :
    Inscription : Août 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Après suppression de 'm_sKey = "QObject";'

    plus de ASSERT

    voici la sortie
    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
    [QxOrm] qx::IxFactory constructor 'domain::collectivite::commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxFactoryX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxSingletonX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxSqlDatabase'
    [QxOrm] qx::QxSqlDatabase : create new database connection in thread '55224' with key '{3faf795b-a54d-40fc-a412-e7e171a549de}'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_QObject'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_QObject'
    ...
    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_QObject'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_QObject'
    [QxOrm] qx::IxSingleton destructor 'qx::QxSqlDatabase'
    [QxOrm] qx::IxSingleton destructor 'qx::QxFactoryX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxSingletonX'
    commune.h
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #ifndef DOMAIN_COLLECTIVITE_COMMUNE_H
    #define DOMAIN_COLLECTIVITE_COMMUNE_H
     
    #include "QxGis/qspoint.h"
    #include "QxGis/qsmultipolygon.h"
     
    namespace domain{
    namespace collectivite{
     
     
    class commune : public QObject
    {
        Q_OBJECT
        QX_REGISTER_FRIEND_CLASS(domain::collectivite::commune)
        Q_PROPERTY(QString commune READ getCommune WRITE setCommune NOTIFY communeChanged)
        Q_PROPERTY(QString insee READ getInsee WRITE setInsee NOTIFY inseeChanged)
        Q_PROPERTY(QsPoint *centreBourgPoint READ getCentreBourg)
        Q_PROPERTY(QsMultiPolygon *contour READ getContour)
     
        public:
     
     
        QString getCommune() const {return m_commune;}
        QString getInsee() const {return m_insee;}
        QsPoint *getCentreBourg() {return &m_centreBourg;}
        QsMultiPolygon *getContour() {return &m_contour;}
     
        void setCommune(const QString &newCommune);
        void setInsee(const QString &newInsee);
    //    void setCentreBourgPoint(QsPoint *newCentreBourg);
     
     
    signals:
     
        void communeChanged();
        void inseeChanged();
     
    public slots:
     
    private:
     
        QString m_commune;
        QString m_insee;
        QsPoint m_centreBourg;
        QsMultiPolygon m_contour;
     
    };
     
    }
    }
     
    QX_REGISTER_PRIMARY_KEY(domain::collectivite::commune, QString)
    QX_REGISTER_COMPLEX_CLASS_NAME_HPP_SYNERGIE(domain::collectivite::commune, QObject, 1, domain_collectivite_commune)
     
    typedef qx::dao::ptr<domain::collectivite::commune> ptr_commune;
    typedef qx::QxCollection<QString, ptr_commune> list_commune;
     
    #endif // DOMAIN_COLLECTIVITE_COMMUNE_H
    commune.cpp
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include "precompiled.h"
    #include "commune.h"
     
    #include <QxMemLeak.h>
     
    QX_REGISTER_COMPLEX_CLASS_NAME_CPP_SYNERGIE(domain::collectivite::commune, domain_collectivite_commune);
     
    namespace qx{
        template <> void register_class(QxClass<domain::collectivite::commune> &t)
        {
        IxDataMember * pData = NULL;
    //    IxFunction * pFct = NULL;
     
          t.setName("commune");
          pData = t.id(& domain::collectivite::commune::m_commune, "commune");
          pData = t.data(& domain::collectivite::commune::m_insee, "insee");
          pData = t.data(& domain::collectivite::commune::m_centreBourg, "centrebourg");
          pData = t.data(& domain::collectivite::commune::m_contour, "contour");
        }
    }
     
    namespace domain{
    namespace collectivite{
        void commune::setCommune(const QString &newCommune)
        {
            m_commune = newCommune;
            emit communeChanged();
        }
     
        void commune::setInsee(const QString &newInsee)
        {
            m_insee = newInsee;
            emit inseeChanged();
        }
    }
    }
    Si tu as besoin d'autres éléments, je te fait un package zip avec les sources nécessaires.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Si tu as besoin d'autres éléments, je te fait un package zip avec les sources nécessaires.
    C'est bon merci, je n'ai pas reproduit mais je sais d'où vient le problème.
    Dans le projet de test, il n'y a pas d'assert car les singletons ne sont pas initialisés dans le même ordre.
    Je pense que si tu remets le code que je t'ai fais supprimer (dans le fichier QxClass.inl, ligne 181, 'm_sKey = "QObject";') et que au début de ton application (juste après le QApplication app(argc, argv);), tu écris la ligne qx::QxClassX::getSingleton();, ça ne devrait plus poser de problème.
    Tu pourras faire le test stp si tu as 5 min pour me confirmer ça ?

    Le bug vient de la spécialisation du constructeur de la classe template : QxClass<QObject>. Je ne pense pas que ce soit bloquant, ça attendra la prochaine version pour apporter une correction...

    Sinon, j'ai regardé ta classe, tout est correct mais je me demande pourquoi tu as mis 1 pour le n° de version de la classe (alors que toutes tes propriétés ont un n° de version à 0 puisque tu ne l'as pas spécifié) ?
    Je pense que tu devrais plutot écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QX_REGISTER_COMPLEX_CLASS_NAME_HPP_SYNERGIE(domain::collectivite::commune, QObject, 0, domain_collectivite_commune)
    Et quand tu fais de nouvelles versions de ton logiciel, tu incrémentes au fur et à mesure ton n° de version (et tes nouvelles propriétés doivent suivre ce n° de version) => ça permet de garantir une compatibilité ascendante si tu utilises la sérialisation des données.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations forums :
    Inscription : Août 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Sinon, j'ai regardé ta classe, tout est correct mais je me demande pourquoi tu as mis 1 pour le n° de version de la classe (alors que toutes tes propriétés ont un n° de version à 0 puisque tu ne l'as pas spécifié) ?
    Ben je sais pas pourquoi j'ai mis 1, j'ai du penser en base 1 et pas 0.
    Je vai corriger ça, merci.

    sinon, j'ai toujours l'ASSERT :

    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
    22
    [QxOrm] qx::IxSingleton constructor 'qx::QxSingletonX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton constructor 'qx::QxSqlDatabase'
    [QxOrm] qx::IxFactory constructor 'domain::collectivite::commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxFactoryX'
    [QxOrm] qx::QxSqlDatabase : create new database connection in thread '59888' with key '{c485995f-a5a2-430e-9364-ca23e50da9c0}'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton constructor 'qx::QxClass_QObject'
    [QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_QObject'
     
    [QxOrm] end dump 'qx::dao::ptr<domain::collectivite::commune>'
    [QxOrm] qx::IxFactory destructor 'domain::collectivite::commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_QObject'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClass_QObject'
    ASSERT: "exist(key)" in file c:\dev\projets\qxorm\include\qxcollection\../../inl/QxCollection/QxCollection.inl, line 274
    [QxOrm] qx::IxSingleton destructor 'qx::QxSqlDatabase'
    [QxOrm] qx::IxSingleton destructor 'qx::QxFactoryX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxClassX'
    [QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_domain.collectivite.commune'
    [QxOrm] qx::IxSingleton destructor 'qx::QxSingletonX'

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    sinon, j'ai toujours l'ASSERT
    Bon ok, de toute façon il ne faut pas chercher à contrôler l'ordre d'initialisation/destruction des singletons.
    Voici un patch que tu peux appliquer pour enlever l'assert (j'apporterai une correction plus propre dans la prochaine version de QxOrm), dans le fichier './src/QxRegister/IxClass.cpp', remplace le destructeur de la classe par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IxClass::~IxClass()
    {
       if (QxClassX::isSingletonNull() || m_sKey.isEmpty()) { return; }
       if (! QxClassX::getSingleton()->exist(m_sKey)) { return; }
       QxClassX::getSingleton()->remove(m_sKey);
    }
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations forums :
    Inscription : Août 2011
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    ok, merci.

    Je ne mets pas en résolu pour que tu y penses.

    @+.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut

    Merci pour avoir détecté cette anomalie

    EDIT: je viens d'uploader une nouvelle version de la 1.1.9 avec le patch sur le destructeur de IxClass, comme ça les prochaines personnes qui téléchargeront la version n'auront pas ce pb.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo