【问题标题】:Id of an item in QTreeWidget changedQTreeWidget 中项目的 ID 已更改
【发布时间】:2017-08-22 05:17:54
【问题描述】:

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-&gt;pointListBox-&gt;indexOfTopLevelItem(itemPtr)或者mScenePtr-&gt;getVertexNumber()可以改变item的id?

Qt 5.5

【问题讨论】:

    标签: c++ qt qt5 qtreewidget


    【解决方案1】:

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

    因此,在两个注释行的情况下,当您添加数字时(使用setText),节点正在排序并且较早的节点已成为顶级项目。

    这就是您在查询“顶级项目”时看到“setText 之前”和“setText 之后”两个不同 ID 的原因。

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

    ui->pointListBox->setSortingEnabled(false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多