Pregunta

Im trying to create a subtree using QTreeWidgetItem. Here's code

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);

that's method:

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));
}

It's ok when im creating a "subtree_1" with m_pRoot as root item, but it breaks down when i want to create "subtree_2" with m_pText as root item.

P.S PTR() equal *parent.

Cant understand what's the problem. Any suggestions?

¿Fue útil?

Solución

If your PTR(QTreeQWidgetItem) macro yields QTreeWidgetItem*, then item is not initialized by createTreeItem function.

The simplest and most logical fix seems to change createTreeItem function to return new item:

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;
}

and use the returned value to initialize m_pText.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top