Strumenti Utente



memorizzare_un_puntatore_in_una_classe_qvariant

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
memorizzare_un_puntatore_in_una_classe_qvariant [2013/03/30 18:23]
mickele creata
memorizzare_un_puntatore_in_una_classe_qvariant [2013/04/11 13:00] (versione attuale)
mickele77
Linea 1: Linea 1:
 +~~NEWSFEED~~
 +
 ====== Memorizzare un puntatore in una classe QVariant ====== ====== Memorizzare un puntatore in una classe QVariant ======
  
-E' possibile momorizzare molti tipi di dati in una classe di tipo QVariant. Oltre a int, double e stringhe è possibile memorizzare anche puntatori, ma solo di tipo void ( void* ).+<news:Memorizzare un puntatore in una classe QVariant
 +Alla pagina [[http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/]] ho trovato un metodo molto utile per memorizzare puntatori di qualunque tipo in un oggetto di tipo QVariant
  
-Vediamo i dettagli su come procedere. Supponiamo la nostra variabile puntatore si chiami pointer. Memorizziamo la variabile in QVariant mediante+Per chi non fosse pratico della programmazione [[http://qt-project.org/doc/qt-5.0/qtwidgets/model-view-programming.html|"Model/View"]] delle librerie [[http://qt-project.org/|Qt]], diciamo che separando il modello dei nostri dati dalla relativa interfaccia grafica, il passaggio delle informazioni tra i due avviene attraverso oggetti di tipo QVariant, contenitori generici che possono contenere praticamente di tutto. I metodi della classe QVariant ci pemettono di gestire facilmente oggetto di tipo double, int, QString. Meno immediato è il passaggio di puntatori a classi personalizzate che adesso analizzeremo. 
 + 
 +Vediamo i dettagli su come procedere. </news>Supponiamo di avere un puntatore 
 + 
 +  MyClass * pointer 
 + 
 +Possiamo memorizzare il contenuto del puntatore in un oggetto QVariant mediante
  
   QVariant v = qVariantFromValue((void *) pointer );   QVariant v = qVariantFromValue((void *) pointer );
  
-Per recuperare il valore ricorriamo a qualcosa del tipo+Volendo recuperare il puntatore dall'oggetto QVariant ricorriamo alle righe di codice 
 + 
 +  pointer = (MyClass *) v.value<void *>(); 
 + 
 +Possiamo semplificare quest'operazione ricorrendo ad un template contenente due metodi di tipo statico 
 + 
 +~~READMORE~~ 
 + 
 +  template <class T> class VariantPtr 
 +  { 
 +  public: 
 +      static T* asPtr(QVariant v) 
 +      { 
 +  return  (T *) v.value<void *>(); 
 +      } 
 +      static QVariant asQVariant(T* ptr) 
 +      { 
 +  return qVariantFromValue((void *) ptr); 
 +      } 
 +  };
  
-  pointer = (YourClass *) v.value<void *>();+E' possibile ora riscrivere le linee di codice viste sopra per memorizzazione e recuperare il puntatore dall'oggetto QvariantPer copiare il valore del puntatore ricorriamo a
  
-Se volete approfondire l'argomento vi rimando alla pagina [[http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/]].+  QVariant v = VPtr<MyClass>::asQVariant(p);
  
 +Per recuperarlo invece usiamo il codice
  
 +  MyClass *p1 = VPtr<MyClass>::asPtr(v);
  
  

memorizzare_un_puntatore_in_una_classe_qvariant.1364664232.txt.gz · Ultima modifica: 2013/03/30 18:23 da mickele

Facebook Twitter Google+ Digg Reddit LinkedIn StumbleUpon Email