查找QTreeWidgetItem是否为顶层级别

8

有没有办法判断我所查看的QTreeWidgetItem是否为顶层?如果该项是顶层(没有父项),则在尝试获取父项文本时我的程序会崩溃。

4个回答

29

引用文档

顶层项目和较低级别的树中的项目之间的主要区别在于,顶层项目没有parent()。这个信息可以用来区分项目,并且在向树中插入和删除项目时非常有用。

if (!node.parent()) {
    // top-level item
}

4
我建议您可以检查QTreeWidgetItem的父项是否为空。
const int FIRST_NODE_INDEX = 0;
QTreeWidget* pTreeWidget = new QTreeWidget(this);
pTreeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> ItemList;

for (int i = 0; i < 10; ++i)
{
    ItemList.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
}    
pTreeWidget->insertTopLevelItems(0, ItemList);

if(!ItemList.at(FIRST_NODE_INDEX)->parent())
{
    qDebug() << "is TopLevel";
}

希望这能有所帮助!

2
顶级项目没有父级项目。
bool isTopLevelItem( QTreeWidgetItem* aItem )
{
    return ( aItem->parent() == nullptr );
}

或者使用lambda函数。
void function()
{
    // ...
    auto isTopLevel = []( QTreeWidgetItem* aItem ){ return ( aItem->parent() == nullptr ); };
    // ...

    if ( isTopLevel( item ) )
    {
        // ...
    }
}

2
treeWidget->indexOfTopLevelItem(item) > -1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接