【问题标题】:Creating subtree with QTreeWidgetItem使用 QTreeWidgetItem 创建子树
【发布时间】:2013-01-27 12:04:03
【问题描述】:

我正在尝试使用 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。

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

【问题讨论】:

    标签: qt qtreewidget qtreewidgetitem


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多