C++ QTreeWidget中项目的Id已更改

C++ QTreeWidget中项目的Id已更改,c++,qt,qt5,qtreewidget,C++,Qt,Qt5,Qtreewidget,Qt有一点很奇怪 我有一个按钮ui->addPointButton和一个QtreeWidgetui->pointListBox。当我点击按钮时,它会在树上添加一个点mScenePtr是一个指向我放置所有点的类的指针。AddPoint是一个创建一个窗口以询问有关点的信息的类 void AddPointsWindow::on_addPointButton_clicked(bool clicked) { Q_UNUSED(clicked); AddPoint addPointWind

Qt有一点很奇怪

我有一个按钮
ui->addPointButton
和一个QtreeWidget
ui->pointListBox
。当我点击按钮时,它会在树上添加一个点
mScenePtr
是一个指向我放置所有点的类的指针。
AddPoint
是一个创建一个窗口以询问有关点的信息的类

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;

    }
}
如果只有第三行,则结果为

id0
id0
value : 0
id1
id1
value : 1
一切都好。 但如果我把另外两行中的一行放进去,两种情况下的结果都是:

id0
id0
value : 0
id1
id0
value : 1
怎么可能呢?调用
ui->pointListBox->indexOfTopLevelItem(itemPtr)
mScenePtr->getVertexNumber()
如何更改项目的id


Qt 5.5

使用
setText
后,树中的项目可能已自动排序

因此,在两个注释行中,当您添加编号(使用
setText
)时,节点将被排序,较早的节点已成为顶级项

这就是为什么在查询“顶级项目”时,您会看到两个不同的ID“在
setText
之前”和“在
setText
之后”

要正确查看结果,请关闭树的排序。(可能在您的构造函数中)

id0
id0
value : 0
id1
id0
value : 1
ui->pointListBox->setSortingEnabled(false);