为什么QStandardItemModel的成员函数children()。size()返回0,而函数hasChildren()返回true?

时间:2016-01-04 01:53:39

标签: c++ qt qt4

_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 个答案:

答案 0 :(得分:3)

阅读文档:

  

bool QAbstractItemModel :: hasChildren(const QModelIndex&amp; parent =   QModelIndex())const

     

如果父有子女,则返回true;否则返回false。

     

在父级上使用rowCount()来查找子级数。

那孩子呢:

  

const QObjectList&amp; QObject :: children()const

     

返回子对象列表。

这不是你真正想要的。

因此,您应该使用QStandardItemModel::rowCount代替children();