【发布时间】: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->pointListBox->indexOfTopLevelItem(itemPtr)或者mScenePtr->getVertexNumber()可以改变item的id?
Qt 5.5
【问题讨论】:
标签: c++ qt qt5 qtreewidget