Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Qt树小部件中重新定位元素?_Qt_Replace_Qtreewidget - Fatal编程技术网

如何在Qt树小部件中重新定位元素?

如何在Qt树小部件中重新定位元素?,qt,replace,qtreewidget,Qt,Replace,Qtreewidget,我有一个包含QTreeWidget的Qt应用程序。 我想换一件 我有一个指针: QTreeWidgetItem *elementToSubstitute; 以及一个返回QTreeWidgetItem*的函数 我想在同一个地方用这个新元素覆盖上一个。 如果删除前一个元素并在其后插入新元素,则新项将放置在树的底部 我应该如何着手让新的分支完全取代以前的分支 例如编辑 现在我有一个指向其中一个chiled的指针。(让我们来看一级的sa)我想用另一个替换它。例如,我想用child“4”替换chil

我有一个包含QTreeWidget的Qt应用程序。 我想换一件

我有一个指针:

QTreeWidgetItem *elementToSubstitute;
以及一个返回
QTreeWidgetItem*
的函数

我想在同一个地方用这个新元素覆盖上一个。 如果删除前一个元素并在其后插入新元素,则新项将放置在树的底部

我应该如何着手让新的分支完全取代以前的分支

例如编辑



现在我有一个指向其中一个chiled的指针。(让我们来看一级的sa)我想用另一个替换它。例如,我想用child“4”替换child“2”,但我想把它放在child 2的位置。

您可以尝试这样做:

QTreeWidgetItem *parent = elementToSubstitute->parent();
int itemIndex = parent->indexOfChid(elementToSubstitute);
parent->removeChild(elementToSubstitute);
parent->insertChild(itemIndex, yourNewTreeItem);

注意:如果
yourNewTreeItem
已在树中,这将不会影响其位置,即不会复制节点。

您可以尝试执行以下操作:

QTreeWidgetItem *parent = elementToSubstitute->parent();
int itemIndex = parent->indexOfChid(elementToSubstitute);
parent->removeChild(elementToSubstitute);
parent->insertChild(itemIndex, yourNewTreeItem);

注意:如果
yourNewTreeItem
已经在树中,这对其位置没有影响,即它不会复制节点。

如果您的项目是顶级的,那么您可以使用IndexOftoLevel项目获取其索引,然后将其从树小部件中删除,然后使用insertTopLevelItem通过您获得的索引插入替换项目。如果项目不是顶级的,则可以使用indexOfChild和insertChild。

如果项目是顶级的,则可以使用IndexOfTopLevel项目获取其索引,然后将其从树小部件中删除,然后使用insertTopLevelItem通过获取的索引插入替换项目。如果项目不是顶级项目,则可以使用indexOfChild和insertChild。

为什么需要替换整个项目?只需更改当前项目的内容,或将新项目复制到当前项目

//assuming you have a pointer to the new and the current Item
*currentItem = *newItem; //done

为什么需要更换整个项目?只需更改当前项目的内容,或将新项目复制到当前项目

//assuming you have a pointer to the new and the current Item
*currentItem = *newItem; //done

固定的。这是一个打字错误。。。谢谢你。这是一个打字错误。。。谢谢教授。。。还没有解决方案。。。它仍然在洗牌我的元素。最后一个插入的字符到达末尾。当我需要呆在同一个地方的时候…:(你能用你必须要做的代码编辑你的问题吗?这有点复杂…因为我不使用QTreeWidgetItem,但我重写了这个类…我可以尝试用标准类型编写一个小示例…我会立即编辑它。:)这样更好吗?你使用我上面发布的代码示例的部分在哪里?对不起。。。还没有解决方案。。。它仍然在洗牌我的元素。最后一个插入的字符到达末尾。当我需要呆在同一个地方的时候…:(你能用你必须要做的代码编辑你的问题吗?这有点复杂…因为我不使用QTreeWidgetItem,但我重写了这个类…我可以尝试用标准类型编写一个小示例…我会立即编辑它。:)这样会更好吗?你使用我上面发布的代码示例的部分在哪里?我尝试了。。。但是在我把它更新到树上之后。。。怎么做?我尝试了ui->treeWidget->setCurrentItem(currentItem);但是没有成功…我试着。。。但是在我把它更新到树上之后。。。怎么做?我尝试了ui->treeWidget->setCurrentItem(currentItem);但是没有成功。。。