Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Trasformazione di coordinate
Forum - C/C++ - Trasformazione di coordinate

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
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 (Admin)
Guru^2


Messaggi: 2305
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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
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