考慮我有以下項目層次QTreeWidget:如何將孩子插入到QTreeWidget層次結構中?
top_item
|--child
每一個項目已經與setItemWidget()
部件分配。 我需要插入這樣我的前兩個元素之間的一個孩子:
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);
它工作正常,除了一個時刻 - 它失去了分配的小部件。 我試着採取與兒童服用前先保存部件與
QWidget* widget_from_child_item = ui->treeWidget->itemWidget(child_item, 0);
ui->treeWidget->removeItemWidget(child_item, 0);
但調用takeChildren()
所有分配的小部件已經被刪除,應用與setItemWidget()
重新分配部件後崩潰之後。
什麼是我的錯?
問題不在於如何插入一個孩子到存在的層次,問題是如何挽救孩子的小部件。 – MaxNes 2014-09-19 09:50:22
試試我的解決方案。如果我理解正確,你已經搞亂了'removeItemWidget'和'takeChildren'的用法。也嘗試改善問題。 – 2014-09-19 09:56:56
是的,這是我做的第一件事:嘗試你的解決方案。好的,謝謝你的建議,很快就會嘗試。 – MaxNes 2014-09-19 10:38:38