使用QTreeWidgetItem创建子树

时间:2013-01-27 12:04:03

标签: qt qtreewidget qtreewidgetitem

我试图使用QTreeWidgetItem创建一个子树。 这是代码

m_pRoot = new QTreeWidgetItem(treeWidget);
m_pRoot->setText(0, "root");
m_pRoot->setData(0, Qt::UserRole, IT_ROOT);
createTreeItem(m_pRoot, m_pText,      "subtree_1",   IT_TEXT);
m_pRoot->setExpanded(true);
createTreeItem(m_pText, m_pPlainText, "subtree_2", IT_TEXT);

那个方法:

void createTreeItem(PTR(QTreeWidgetItem) parent, PTR(QTreeWidgetItem) item, CREF(QString) name, ItemType itemType)
{
    item = new QTreeWidgetItem(parent);
    item->setText(0, name);
    item->setData(0, Qt::UserRole, QVariant(itemType));
}

当我使用m_pRoot作为根项目创建“subtree_1”时可以,但是当我想用m_pText作为根项目创建“subtree_2”时它会崩溃。

P.S PTR()等于* parent。

无法理解问题所在。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您的PTR(QTreeQWidgetItem)宏产生QTreeWidgetItem *,则createTreeItem函数不会初始化item。

最简单和最合乎逻辑的修复似乎改变了createTreeItem函数以返回新项:

QTreeWidgetItem* createTreeItem(PTR(QTreeWidgetItem) parent, PTR(QTreeWidgetItem) item, 
    CREF(QString) name, ItemType itemType)
{
    item = new QTreeWidgetItem(parent);
    item->setText(0, name);
    item->setData(0, Qt::UserRole, QVariant(itemType));
    return item;
}

并使用返回的值初始化m_pText。