Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. acquisire valore attributo di altra classe
Forum Updated to NodeBB v4.3 + New Features

acquisire valore attributo di altra classe

Scheduled Pinned Locked Moved Solved Italian
5 Posts 2 Posters 888 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • elicatE Offline
    elicatE Offline
    elicat
    wrote on last edited by
    #1

    Buongiorno,
    Scusate l'ignoranza è il primo anno che lavoro con QT/QML/QWEBENGINE e C++.
    Nel mio progetto istanzio la classe DataBase e imposto un suo attributo pubblico in main.cpp.

    	DataBase *database = new DataBase;
    	if (database->checkDataBase(path_and_name_db)) {
    		database->pippo= database->connectToDataBase(type_db, path_and_name_db, driver_db, . . ., "nome_connessione");
    	}
    
    

    Dichiarazione public in classe DataBase:

     QSqlDatabase pippo;
    QSqlDatabase connectToDataBase(int type_db, QString path_and_name_db, QString driver_db, . . ., QString conn_name );
    

    Come posso acquisire DataBase::pippo con il valore impostato nella main se sono in un'altra classe ?

    Ovviamente ho provato varie possibilità senza successo prima di chiedere al forum.
    Grazie Grazie Grazie Grazie Grazie

    Saluti, Gianfranco Elicat

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by
      #2

      Buongiorno!
      La risposta e' semplice ma purtroppo devo anche segnalare che quello che sta facendo e' sbagliato.

      Da https://doc.qt.io/qt-5/qsqldatabase.html#details

      Warning: It is highly recommended that you do not keep a copy of the QSqlDatabase around as a member of a class, as this will prevent the instance from being correctly cleaned up on shutdown. If you need to access an existing QSqlDatabase, it should be accessed with database(). If you chose to have a QSqlDatabase member variable, this needs to be deleted before the QCoreApplication instance is deleted, otherwise it may lead to undefined behavior.

      Quindi QSqlDatabase pippo; va cancellato e basta chiamare QSqlDatabase::addDatabase passando "pippo" come secondo argomento. Da li' in poi basta chamare QSqlDatabase::database("pippo") per recuperarlo ovunque nel programma.

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • elicatE Offline
        elicatE Offline
        elicat
        wrote on last edited by
        #3

        @VRonin said in acquisire valore attributo di altra classe:

        QSqlDatabase::database("pippo")

        Buongiorno,
        La ringrazio per la sua risposta. in pratica lo facevo già, solo che portavo su un altro ogetto che suavo nel metodo in qui utilizzavo la connessione e questo mi ha spinto a pensare ce fosse meglio usare un solo oggetto nel progetto.

        Codice attuale:

        		QSqlDatabase pippo= QSqlDatabase::database("dbpippo");
        		QSqlDatabase pluto= QSqlDatabase::database(dbpluto);
        		QSqlQuery querypippo(pippo);
        		QSqlQuery querypluto(pluto);
        

        In pratica basa fare :

        		QSqlQuery querypippo(QSqlDatabase::database("dbpippo"));
        		QSqlQuery querypluto(QSqlDatabase::database(dbpluto));
        

        Mantenere il codice attuale, porta via molte risorse? Conviene modificarlo seguendo la soluzione più corretta?

        Saluti, Gianfranco Elicat

        1 Reply Last reply
        0
        • VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by
          #4

          codice attuale:
          QSqlDatabase pippo= QSqlDatabase::database("dbpippo");

          Quasi. Il problema e' che il vero codice attuale e':

          DataBase *database = new DataBase;
          database->pippo=QSqlDatabase::database("dbpippo");
          

          Cioe' pippo non e' una variabile locale allocata sullo stack ma un membro di un oggetto allocato a memoria dinamica. Se ti dimentichi di chamare delete sudatabase o lo chiami troppo tardi crei problemi al programma. Usare una variabile locale chiamando QSqlDatabase pippo= QSqlDatabase::database("dbpippo"); tutte le volte che ti serve e' perfettamente valido e sicuro

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          0
          • elicatE Offline
            elicatE Offline
            elicat
            wrote on last edited by
            #5

            Grazie delle delucidazioni

            Saluti, Gianfranco Elicat

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved