Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Chiarimento costruttore classe che eredita QObject
Forum Updated to NodeBB v4.3 + New Features

Chiarimento costruttore classe che eredita QObject

Scheduled Pinned Locked Moved Solved Italian
3 Posts 2 Posters 976 Views
  • 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.
  • PollyP Offline
    PollyP Offline
    Polly
    wrote on last edited by Polly
    #1

    Salve avrei bisogno di un chiarimento teorico.

    In molti esempi di classi che ereditano da QObject, al costruttore della classe ereditata si passa spesso come argomento un puntatore ad un oggetto Qobject ma senza farlo puntare a nulla. Di seguito nella lista di inizializzazione si inizializza un oggetto QObject al cui costruttore si passo proprio quel puntatore, creando di fatto un collegamento a quell'oggetto padre (immagino sia corretto). La prima domanda è perchè e quali vantaggi porta.

    Poi, nella funzione main viene inizializzato un puntatore della classe ereditata che punta a un oggetto dinamico della classe ereditata in cui lui stesso viene passato al costruttore.
    Perchè non si fa la stessa cosa dichiarata nel prototipo di funzione?
    Faccio un esempio pratico

    Class ereditata: public QObject{
    .....
    public :
               ereditata(QObject * parent = NULL) : QObject(parent)
    ..}
    
    Int main () {
    ...
       ereditata *erede = new ereditata(erede);
    

    Grazie

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

      E' spiegato meglio qui http://doc.qt.io/qt-5/objecttrees.html ma, in pratica, il maggior vantaggio e' che se distruggi il parent, tutti i figli si distruggono. se passi null al costruttore, invece, devi preoccuparti tu di chiamare delete o deleteLater() sull'oggetto.

      In pratica agisce come un std::unique_ptr che pero' gestisce in automatico e in maniera sicura la disconnessione da signals e slots.

      se la classe base e' un QWidget (o una sua subclasse) il parent determina anche la finestra in cui il nuovo widget verra' posizionato.

      ereditata *erede = new ereditata(erede); questo e' sbagliato, stai usando un dagling pointer e crasha se provi a farlo girare

      "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
      1
      • PollyP Offline
        PollyP Offline
        Polly
        wrote on last edited by
        #3

        Grazie. Perfetto

        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