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