[Qt] Jak odczytać index obiektu-dziecka w QTreeWidget?
Ostatnio zmodyfikowano 2012-06-23 15:29
programista12 Temat założony przez niniejszego użytkownika |
[Qt] Jak odczytać index obiektu-dziecka w QTreeWidget? » 2012-06-23 09:30:11 Chodzi o to, że podczas usuwania obiektu-dziecka z QTreeWidget chcę usunąć wpis w oddzielnym vectorze i nie wiem jak odczytać index wpisu-dziecka. Tak dodaję obiekt-rodzic: void MainWindow::on_pushButton_AddAnimation_clicked() { QTreeWidgetItem * item = new QTreeWidgetItem( ui->treeWidget ); item->setText( 0, ui->lineEdit_TextID->text() ); animations.push_back( Animation( ui->lineEdit_TextID->text(), ui->spinBox->value() ) ); ui->lineEdit_TextID->clear(); }
Tak dodaję obiekt-dziecko: void MainWindow::on_pushButton_AddFrame_clicked() { nr_f += 1; QTreeWidgetItem * itm = new QTreeWidgetItem( ui->treeWidget->currentItem() ); itm->setText( 0, tr( "Klatka nr. %0" ).arg( nr_f ) ); animations[ ui->treeWidget->currentIndex().row() ].frames.push_back( QRect( 1, 2, 3, 4 ) ); }
A tak usuwam obiekt. Robię to za pomocą jednego przycisku, więc sprawdzam, czy to rodzic, czy dziecko: void MainWindow::on_pushButton_RemoveSelected_clicked() { QTreeWidgetItem * ci = ui->treeWidget->currentItem(); if( !ci ) return; QTreeWidgetItem * parent = ci->parent(); int index; if( parent ) { index = parent->indexOfChild( ui->treeWidget->currentItem() ); animations[ ui->treeWidget->currentIndex().row() ].frames.remove( ui->treeWidget->currentItem()->indexOfChild( parent ) ); delete parent->takeChild( index ); } else { index = ui->treeWidget->indexOfTopLevelItem( ui->treeWidget->currentItem() ); animations[ index ].frames.clear(); delete ui->treeWidget->takeTopLevelItem( index ); } }
I ta metoda działa, gdy usuwam pierwszy element-dziecko. Gdy usuwam drugi, trzeci, itd. to program się wysypuje. |
|
DejaVu |
» 2012-06-23 13:49:07 Wysypuje się przy próbie usuwania elementów z vectora czy przy próbie usuwania z drzewa? Jeżeli wysypuje się przy próbie usuwania z vectora to nic dziwnego, jeżeli używasz indeksy, bowiem z chwilą usunięcia dowolnego elementu z vectora, zapisane wcześniej indeksy będą wskazywały na inne dane niż powinny. |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2012-06-23 14:52:04 Wysypuje się przy usuwaniu z vectora. Jest w QTreeWidgetItem jakieś pole, które ma niepowtarzalną wartość? Wtedy przechowywałbym ją w vectorze i usuwał element vectora na podstawie tej wartości. A może jest jakiś inny sposób? |
|
DejaVu |
» 2012-06-23 15:29:46 vector jest tu z definicji złym pomysłem. |
|
« 1 » |