为啥 QStandardItemModel 的成员函数 children().size() 返回 0,而函数 hasChildren() 返回 true?

Posted

技术标签:

【中文标题】为啥 QStandardItemModel 的成员函数 children().size() 返回 0,而函数 hasChildren() 返回 true?【英文标题】:Why QStandardItemModel 's member function children().size()return 0,while function hasChildren() return true?为什么 QStandardItemModel 的成员函数 children().size() 返回 0,而函数 hasChildren() 返回 true? 【发布时间】:2016-01-04 01:53:38 【问题描述】:

_inputfileModelQStandardItemModel 类型的指针,我想使用它的成员函数children() 来获取子项。但是在下面的代码中, int childrenNum = _inputfileModel->children().size(); childrenNum 的结果不是 1 而是 0。但是当我使用 hasChildren() 时,返回值为 true。谁能解释为什么?函数children() 是返回***子级还是所有子级?

void InputTree::addTreeNode(TreeNode &node)  

    QStringList inputImgList = node.picturePathList;  
    int num = inputImgList.size();  
    if( num < 1) return ;  
    QStandardItem *fatherItem = new QStandardItem;  
    fatherItem->setIcon(node.fatherIcon);  
    fatherItem->setText(node.fatherNodeName);  
    fatherItem->setData(FOLDER,ItemTypeRole);  

    for( int i = 0; i < num; ++i)
    
        QStandardItem *pictureItem = new QStandardItem;
        pictureItem->setText(node.imageNodeName.at(i));
        pictureItem->setIcon(node.imgIcon);
        pictureItem->setData(PICTURE,ItemTypeRole);
        fatherItem->appendRow(pictureItem);
    
    _inputfileModel->appendRow(fatherItem);
    bool has_child  = false;
    has_child = _inputfileModel->hasChildren();
    int childrenNum = _inputfileModel->children().size();

【问题讨论】:

【参考方案1】:

只需阅读文档:

bool QAbstractItemModel::hasChildren(const QModelIndex & parent = QModelIndex()) 常量

如果父母有孩子,则返回真;否则返回 false。

在父级上使用 rowCount() 来找出子级的数量。

那么孩子呢:

const QObjectList & QObject::children() const

返回子对象列表。

这不是你真正想要的。

所以你应该使用QStandardItemModel::rowCount 而不是children()

【讨论】:

以上是关于为啥 QStandardItemModel 的成员函数 children().size() 返回 0,而函数 hasChildren() 返回 true?的主要内容,如果未能解决你的问题,请参考以下文章

如何调整 QTreeView 和 QStandardItemModel 中的行大小?

如何从函数传递 QStandardItemModel?

Qtableview 中的 QStandardItemModel

Qt入门教程数据模型篇 QStandardItemModel标准项目模型

Qt入门教程数据模型篇 QStandardItemModel标准项目模型

QTableView 和 QStandardItemModel 的问题