首页 > 解决方案 > QTreeWidget takeChild() - Qt

问题描述

我有一个 treeWidget,我需要在其中删除 QTreeWidgetItem 的子元素。

QTreeWidgetItem *listing = new (ui->treeWidget);
AddChild(listing,id);
AddChild(listing,id);`// this is what i need to delete
AddChild(listing,id);
listing->takeChild(1);

我试过 func takeChild(int index) 但什么也没发生

void AddChild(QTreeWidget *s,int id)
{
QTreeWidgetItem *_s = new QTreeWidgetItem(ui->treeWidget);
_s->setText(0,QString::number(id));
s->addChild(_s);
}

标签: qt

解决方案


你的代码有错误,

QTreeWidgetItem *listing = new (ui->treeWidget);

应该:

QTreeWidgetItem *listing = new QTreeWidgetItem(ui->treeWidget);

并且函数的签名AddChild()是错误的:

void AddChild(QTreeWidget *s,int id)

应该:

AddChild(QTreeWidgetItem *s,int id)

现在主要问题为什么takeChild()对您不起作用,是您没有将项目作为子项添加到listing,而是将它们添加到treeWidget,因此在您的 中AddChild(),您应该将父项设置为Sis listing,因此您的代码应该是:

QTreeWidgetItem *listing = new QTreeWidgetItem(ui->treeWidget);
listing->setText(0, tr("Listing"));
AddChild(listing,0);
AddChild(listing,1); // this is what i need to delete
AddChild(listing,2);
listing->takeChild(1);

和函数 AddChild()

void AddChild(QTreeWidgetItem *s,int id)
{
    QTreeWidgetItem *_s = new QTreeWidgetItem(s);
    _s->setText(0,QString::number(id));
    s->addChild(_s);
}

推荐阅读