Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Trasformazione di coordinate
Forum - C/C++ - Trasformazione di coordinate

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1925
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 21:53
Domenica, 24/03/2019
Buonasera, stavo cercando di implementare una sorda di Editor di nodi simile al mio progetto in C#.

Uso ovviamente il Qt con una classe ereditata dall'oggetto QGraphicsScene.

Sto usando ovviamente una funziona "rudimentale" per capire il miglior modo ed il metodo corretto
per ottenere quello che voglio. ovvero tenere costantemente aggiornata la posizione di un QGraphicsLineItem.

Attualmente ho scritto questo codice:


Codice sorgente - presumibilmente C/C++

  1. //! connessione
  2. // @param  Item di origine
  3. // @param Item di destinazione
  4.  
  5. void NPCEditor::Connect(QGraphicsItem *src, QGraphicsItem *dest)
  6. {
  7.     NPCEditor::connection conn;
  8.     conn.src = src;
  9.     conn.dest = dest;
  10.  
  11.     conn.connected = new QGraphicsLineItem(src->x(),src->y(),dest->x(),dest->y());
  12.  
  13.     scene->addItem(conn.connected);
  14.     Connections.append(conn);
  15. }
  16.  
  17.  
  18.  
  19. //Metodo Update / Paint
  20.  
  21. void NPCEditor::paintEvent(QPaintEvent *e)
  22. {
  23.  
  24.  
  25.     for(int i = 0; i < scene->items().count(); i++)
  26.     {
  27.  
  28.         QGraphicsLineItem *linea = dynamic_cast<QGraphicsLineItem*>(scene->items().at(i));
  29.         if(linea)
  30.         {
  31.             scene->items().removeAt(i);
  32.         }
  33.          qDebug() << &linea;
  34.     }
  35.  
  36. }



Non s˛ se il metodo Ŕ corretto, Ma dovrei sapere se quell'item trovato nel ciclo for
corrisponde ad una QGraphicsLineItem e se si, rimuoverla per poi aggiungerla con posizioni aggiornate.

Eseguendo il qDebug ho come output: 0xc4c664
che sembra essere pi¨ un indirizzo di memoria pi¨ che un output del tipo.

Non sono ancora ben ferrato sulle conversioni dei tipo ( static, dynamic e reinterpret )
quindi probabile che stai facendo qualche macello di non s˛ quale portata.

ma in alternativa, conoscete un metodo per fare ci˛?

Quello che intendevo fare e come in c# ( esempio )

Codice sorgente - presumibilmente C/C++

  1. var oggetto = new TextBox();
  2.  
  3. if(oggetto.GetType() == typeof(TextBox))
  4. {
  5.  
  6.  //ok
  7. }




Ultima modifica effettuata da Thejuster il 24/03/2019 alle 23:30


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1588
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 11:34
Lunedý, 25/03/2019
dynamic_cast<tipo*>(...) Ritorna nullptr se il dato passato non Ŕ convertibile nel tipo richiesto.

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1925
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:42
Martedý, 26/03/2019
Ok.
Per˛ facendo

If(Linea) {...}

Non succede nulla, come se la condizione
Non viene proprio valutata


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1588
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:08
Martedý, 26/03/2019
Testo quotato

Postato originariamente da Thejuster:
Ok.
Per├▓ facendo

If(Linea) {...}

Non succede nulla, come se la condizione
Non viene proprio valutata


Quindi il tuo oggetto non Ŕ castabile in un tipo* e non ci puoi fare proprio nulla. Se vuoi la riprova che quel codoce viene eseguito prova a fare:

auto oggettoTipoCorretto = dynamic_cast<tipo&>(oggetto) e vedi che crash spettacolare che ti caccia la tua applicazione.

PM Quote