2017-03-28 13 views
0

Qtについて非常に奇妙なことがあります。QTreeWidget内のアイテムのIDが変更されました

ボタンui->addPointButtonとQtreeWidget ui->pointListBoxがあります。ボタンをクリックすると、ツリーにポイントが追加されます。 mScenePtrは、すべてのポイントを入れたクラスへのポインタです。 AddPointは、ポイントに関する情報を求めるウィンドウを作成するクラスです。このexempleで

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; 

    } 
} 

、私は、第一及び第二のための1のために= 0 vertex.xで2点を作成し、ボタンを二回クリックしてください。真ん中の3行で

ルック:唯一の三行がある場合

  //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 

EverythongはOKです。私は他の二つのラインの一つを置けば はしかし、どちらの場合も、結果は次のとおりです。

id0 
id0 
value : 0 
id1 
id0 
value : 1 

どのようにそれは可能ですか? ui->pointListBox->indexOfTopLevelItem(itemPtr)またはmScenePtr->getVertexNumber()への呼び出しは、アイテムのIDをどのように変更できますか?

のQt 5.5

答えて

0

setTextを使用した後は、ツリー内の項目を自動的にソートしている可能性があります。

2つのコメント行の場合、(setTextを使用して)番号を追加すると、ノードがソートされ、以前のノードがトップレベルの項目になります。

これは、「トップレベルアイテム」を照会しているときに、「setText」と「setText」の後に2つの異なるIDが表示されている理由です。

結果を正しく表示するには、ツリーのソートをオフにします。 (あなたのコンストラクタ内にある可能性があります)

ui->pointListBox->setSortingEnabled(false); 
関連する問題