QGraphicsScene index order



  • come da titolo: non capisco l'odine che si ottine con ".setItemIndexOrder(QGrapicsScene::NoIndex)" .... ovvero

    scenet->setItemIndexMethod(QGraphicsScene::NoIndex);
    connect(ui->mybutton, SIGNAL(pressed()), this, SLOT(mycancelslot());
    
    
    
    void Mainwindows::mycancelslot()
    {
    QList<QGraphicsItem*> ListPix = scenet->items();
            scenet->removeItem(ListPix.last());
    }
    

    questo mi cancella degli item ma non quelli che vorrei ... diciamo che non li cancella dall'ultimo al primo in ordine temporale di creazione..... (il codice è incompleto... in questo se si insiste troppo sul premere il bottone si manda in crash l'app .... perchè si svuota la scena).

    for(int i=0; i<InUserChose; i++)
    {
           QGraphicsPixmapItem* item = new QGraphicsPixmapItem();
                   item->setPixmap(QPixmap::fromImage(myimage));
                   item->setPos(mypoint);
                   scenet->addItem(item);
    }
    

    voirrei invecie capire come ottenere la cancellazione con ordine temporale di creazione degli item .... almeno il gruppo QGraphicsPixmapItem ...
    Parte dello stesso problema è anche un'altra domanda: ma è possibile cancellare dalla scena tutti gli item ma non un gruppo specifico, per esempio QGraphicsPixmapItem??

    saluti
    Giorgio



  • non credo sia possibile con QGraphicsScene::NoIndex quello che puoi fare e' farlo manualmente.

    in Mainwindows agiungi QStack<QGraphicsPixmapItem*> m_itemsStack; nell'area private:

    poi:

    
    for(int i=0; i<InUserChose; i++)
    {
           QGraphicsPixmapItem* item = new QGraphicsPixmapItem();
                   item->setPixmap(QPixmap::fromImage(myimage));
                   item->setPos(mypoint);
                   scenet->addItem(item);
    m_itemsStack.push(item);
    }
    
    void Mainwindows::mycancelslot()
    {
            scenet->removeItem(m_itemsStack.pop());
    }
    


  • @VRonin Grazie molte della risposta perfetto .... seguo il consiglio.

    per la risposta alla seconda domanda ... mi risdpondo da solo, utilizzando Zvalue è possibile filtrare gruppi di item senza dovere usare groupitem (ovviamente il "disegno fisico" lo deve permettere ... ma vedo che anche sui cad migliori gli errori di grafica riguardanti lo zvalue sono trascurati ... quindi ...):

    void MainWindow::test_selective_clean()
    {
        QList<QGraphicsItem*> citem = scene_Pallet->items();
        for (int ct = 0; ct < citem.size(); ct++)
        {
            if ((citem[ct]->zValue() > 45) && ((citem[ct]->zValue() < 55)))
            {
                scene_Pallet->removeItem(citem[ct]);
            }
        }
    }
    

    Grazie
    Saluti
    Giorgio


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.