QTreeWidget 中项目的 ID 已更改



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;
    }
}

在这个例子中,我在按钮上单击两次,创建两个点,第一个点为 vertex.x = 0,第二个点为 1。

看看中间的三行:

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

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

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之后"。

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

ui->pointListBox->setSortingEnabled(false);

相关内容

  • 没有找到相关文章

最新更新