Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] Jak odczytać index obiektu-dziecka w QTreeWidget?

Ostatnio zmodyfikowano 2012-06-23 15:29
Autor Wiadomość
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:
C/C++
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:
C/C++
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:
C/C++
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.
P-58954
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.
P-58964
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?
P-58974
DejaVu
» 2012-06-23 15:29:46
vector jest tu z definicji złym pomysłem.
P-58976
« 1 »
  Strona 1 z 1