2017-03-28 3 views
0

Es gibt etwas sehr seltsames an Qt.ID eines Artikels in QTreeWidget geändert

Ich habe eine Schaltfläche ui->addPointButton und ein QtreeWidget ui->pointListBox. Wenn ich auf den Knopf klicke, fügt er einen Punkt zum Baum hinzu. mScenePtr ist ein Zeiger auf die Klasse, die ich alle meine Punkte gesetzt habe. AddPoint ist eine Klasse, die ein Fenster erstellt, das nach Informationen über den Punkt fragt.

void AddPointsWindow::on_addPointButton_clicked(bool clicked) 
{ 
    Q_UNUSED(clicked); 

    AddPoint addPointWindow(mScenePtr->getColor_or_texture()); 
    int addPointWindowResult = addPointWindow.exec(); 

    if (addPointWindowResult == QDialog::Accepted) 
    { 
     SVertex vertex = addPointWindow.getVertex(); 
     mScenePtr->addVertex(vertex); 

     QTreeWidgetItem* itemPtr = new QTreeWidgetItem(ui->pointListBox); 
     cout << "id" << ui->pointListBox->indexOfTopLevelItem(itemPtr) << endl; 

     //itemPtr->setText(0,QString::number(mScenePtr->getVertexNumber())); 
     //itemPtr->setText(0, QString::number(ui->pointListBox->indexOfTopLevelItem(itemPtr))); 
     itemPtr->setText(0, "hjhjh"); 
     cout << "id" << ui->pointListBox->indexOfTopLevelItem(itemPtr) << endl; 

     itemPtr->setText(1, QString::number(vertex.x)); 
     itemPtr->setText(2, QString::number(vertex.y)); 
     itemPtr->setText(3, QString::number(vertex.z)); 
     if (color == mScenePtr->getColor_or_texture()) 
     { 
      itemPtr->setText(4, QString::number(vertex.r)); 
      itemPtr->setText(5, QString::number(vertex.g)); 
      itemPtr->setText(6, QString::number(vertex.b)); 
     } 
     //ui->pointListBox->insertTopLevelItem(ui->pointListBox->topLevelItemCount(), itemPtr); 



     cout << "value : " << vertex.x << endl; 

    } 
} 

In diesem exemple, klicke ich zweimal auf die Buttons, erstellen Sie zwei Punkte mit vertex.x = 0 für die erste und 1 für die zweite.

Blick auf die drei Linien in der Mitte:

  //itemPtr->setText(0,QString::number(mScenePtr->getVertexNumber())); 
     //itemPtr->setText(0, QString::number(ui->pointListBox->indexOfTopLevelItem(itemPtr))); 
     itemPtr->setText(0, "hjhjh"); 

Wenn nur die dritte Zeile ist, ist das Ergebnis

id0 
id0 
value : 0 
id1 
id1 
value : 1 

Everythong in Ordnung ist. Aber wenn ich eine der beiden anderen Linien setzen, ist das Ergebnis in beiden Fällen:

id0 
id0 
value : 0 
id1 
id0 
value : 1 

Wie es möglich ist? Wie kann der Anruf an ui->pointListBox->indexOfTopLevelItem(itemPtr) oder mScenePtr->getVertexNumber() die ID des Artikels ändern?

Qt 5.5

Antwort

0

Nach setText verwenden, können die Elemente in der Struktur automatisch sortiert haben.

In den zwei kommentierten Zeilen Fällen, wenn Sie die Nummer hinzufügen (setText), werden die Knoten sortiert und der frühere Knoten ist der oberste Ebene Artikel geworden.

Das ist der Grund, warum Sie zwei verschiedene IDs "vor setText" und "nach setText" sehen, wenn Sie "Top-Level-Artikel" abfragen.

Um die Ergebnisse richtig anzuzeigen, deaktivieren Sie die Sortierung für den Baum. (möglicherweise in Ihrem Konstruktor)

ui->pointListBox->setSortingEnabled(false); 
Verwandte Themen