Solved 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'areaprivate:
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