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

Discussion :

Sous-classer QApplication

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut Sous-classer QApplication
    Bonjour,

    Je souhaite savoir s'il est judicieux de sous-classer QApplication pour assurer l'initialisation et la finalisation d'une unique connection à une BDD indispensable pour un fonctionnement correct du programme ?

    On m'a toujours dit : sous-classer A en B uniquement si B est A. Mais j'ai un peu de mal à répondre à cette question si j'ajoute la connection / déconnection de la BDD.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    On dit "hériter" ou "dériver", pas "sous classer".

    Sinon, pourquoi ta classe QApplication (ou dérivée) devrait avoir la responsabilité de gérer les connections à la base de données ? Je dirais à priori aucune raison donc pas besoin de dériver QApplication (et ça serait lui donner une responsabilité supplémentaire, ce qui contrevient au "principe de responsabilité unique", cf blog d'Emmanuel Deloget)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut
    Je lis dans la doc Qt que QApplication est responsable de l'initialisation et de la finalisation de l'application.
    L'application ne pouvant pas fonctionner sans la connection à la BDD, je considère qu'il s'agit la d'une étape indispensable et prérequise. En d'autre terme qu'il s'agit d'une des étapes d'initialisation.
    D'où ma question.... Mais j'avoue que même si sur un plan pratique il y a des avantages; j'ai le sentiment qu'il y a un problème.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Par défaut
    Heu parfois il ne faut pas chercher midi à 14h

    Il suffit d'initialiser au début du main.cpp et de libérer à la fin il me semble.

    Pour une approche plus 'orienté objet', tu peux créer une classe qui initialise dans le constructeur et finalise dans le destructeur. Il te reste à créer l'objet dans le main (il sera détruit lorsqu'il sera hors de portée) par exemple.

    Mais aller chipoter dans QApplication qui n'a rien à voir avec ça non !
    On utilise l'héritage pour des concepts qui se ressemble, pour des spécialisations de concepts. Pas pour faire une chose en même temps qu'une autre quand ça nous arrange

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut
    Dans le main ce n'est pas possible parcequ'il faut que la finalisation est lieu après app.exec() pour permettre la libération de ressources.
    Dans mon widget principal (fenêtre principale) ce n'est pas possible non plus parcequ'il faut que l'initialisation de la BDD est lieu dans le constructeur, et il faut qu'il soit possible d'annuler la construction de ce même objet.

    Donc faut-il créer un autre objet qui encapsule mon widget principal, et qui s'occupe de la BDD ?

    Je pense créer une classe singleton qui gére la connection avec la BDD (puisqu'elle doit être unique pour tout le programme), initialise la connection dans le main et qui connecte QApplication::aboutToQuit() à un slot de déconnection.
    Pour la libération des ressources avant de fermer la connection, entretenir une liste de pointeurs vers les ressources.

    Merci

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    J'ai l'impression que tu te compliques la vie pour rien...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main(int argc, char** argv)
    {
       // initialisation de l'application
       QApplication app(argc, argv);
       // initialisation de la base de données
       QSqlDatabase db = ...
       // initialisation de la fenêtre principale
       QMainWindow w;
       w.show();
       // démérrage de la boucle d'évènement
       return app.exec();
    }
    Si le code dans ta fonction main est trop important, tu peux créer des classes pour initialiser ta base de données et ta fenêtre principale mais pas besoin de les faire hériter de QSqlDatabase et QMainWindow, une simple composition/agrégation est suffisante.
    Et pas besoin de créer un singleton, QSqlDatabase est lui même un singleton.

Discussions similaires

  1. [OL-2007] Classer ses mails en catégories, sous catégories
    Par Dae_mon dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 28/02/2014, 14h04
  2. Classer des données sous python et déterminer le sens
    Par Chefcou dans le forum Général Python
    Réponses: 2
    Dernier message: 13/05/2012, 06h58
  3. sous classer tuple
    Par kango dans le forum Général Python
    Réponses: 4
    Dernier message: 21/06/2009, 18h22
  4. Réponses: 13
    Dernier message: 24/09/2007, 14h03
  5. POO : comment bien sous-classer ?
    Par Invité1 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/04/2005, 12h20

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