次の項目階層を持つ QTreeWidget があるとします。
top_item
|--child
すべてのアイテムにsetItemWidget()
ウィジェットが割り当てられています。次のように、最初の 2 つの要素の間に別の子を挿入する必要があります。
top_item
|--another_child
|--child
私は次のコードでそれをやろうとしています:
QTreeWidgetItem* top_item = new QTreeWidgetItem;
ui->treeWidget->addTopLevelItem(top_item);
QTreeWidgetItem* child_item = new QTreeWidgetItem;
top_item->addChild(child_item);
ui->treeWidget->setItemWidget(top_item, 0, new QPushButton);
ui->treeWidget->setItemWidget(child_item, 0, new QPushButton);
// ---- let's insert another child ----
auto last_children = top_item->takeChildren();
QTreeWidgetItem* another_child_item = new QTreeWidgetItem;
top_item->insertChild(0, another_child_item);
ui->treeWidget->setItemWidget(another_child_item, 0, new QPushButton);
another_child_item->addChildren(last_children);
割り当てられたウィジェットが失われたという 1 つの瞬間を除いて、正常に動作します。子供を連れて行く前に、ウィジェットを取得して保存しようとしました
QWidget* widget_from_child_item = ui->treeWidget->itemWidget(child_item, 0);
ui->treeWidget->removeItemWidget(child_item, 0);
しかし、割り当てられたすべてのウィジェットを呼び出した後、takeChildren()
削除され、ウィジェットを で再割り当てした後にアプリがクラッシュしますsetItemWidget()
。
私の間違いは何ですか?