1

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」を作成する場合は機能しません。

PS PTR() は *親に等しい。

何が問題なのか理解できません。助言がありますか?

4

1 に答える 1

1

PTR(QTreeQWidgetItem) マクロが QTreeWidgetItem* を生成する場合、アイテムは createTreeItem 関数によって初期化されません。

最も単純で最も論理的な修正は、 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 を初期化します。

于 2013-01-27T14:03:26.250 に答える