Oppure

Loading
24/03/19 20:53
Thejuster
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:




//! connessione
// @param  Item di origine
// @param Item di destinazione

void NPCEditor::Connect(QGraphicsItem *src, QGraphicsItem *dest)
{
    NPCEditor::connection conn;
    conn.src = src;
    conn.dest = dest;

    conn.connected = new QGraphicsLineItem(src->x(),src->y(),dest->x(),dest->y());

    scene->addItem(conn.connected);
    Connections.append(conn);
}



//Metodo Update / Paint

void NPCEditor::paintEvent(QPaintEvent *e)
{
  

    for(int i = 0; i < scene->items().count(); i++)
    {

        QGraphicsLineItem *linea = dynamic_cast<QGraphicsLineItem*>(scene->items().at(i));
        if(linea)
        {
            scene->items().removeAt(i);
        }
         qDebug() << &linea;
    }
 
}



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 )


var oggetto = new TextBox();

if(oggetto.GetType() == typeof(TextBox))
{

 //ok
}



Ultima modifica effettuata da Thejuster 24/03/19 22:30
mire.forumfree.it/ - Mire Engine
C# UI Designer
25/03/19 10:34
TheDarkJuster
dynamic_cast<tipo*>(...) Ritorna nullptr se il dato passato non è convertibile nel tipo richiesto.
aaa
26/03/19 15:42
Thejuster
Ok.
Però facendo

If(Linea) {...}

Non succede nulla, come se la condizione
Non viene proprio valutata
mire.forumfree.it/ - Mire Engine
C# UI Designer
26/03/19 21:08
TheDarkJuster
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.
aaa