2016-01-04 4 views
1

_inputfileModel является указателем типа QStandardItemModel, я хочу использовать его функцию-член children(), чтобы получить детские предметы. Но в следующих кодах int childrenNum = _inputfileModel->children().size();childrenNum результат не 1, а 0. Но когда я использую hasChildren(), возвращаемое значение истинно. Может ли кто-нибудь объяснить, почему? И действует ли функция children() для детей или всех детей?Почему функция участника QStandardItemModel children(). Size() возвращает 0, а функция hasChildren() возвращает true?

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(); 
} 

ответ

3

Просто прочитайте документацию:

BOOL QAbstractItemModel :: HasChildren (Const QModelIndex & родителя = QModelIndex)() константный

Возвращает истину, если родитель имеет каких-либо детей; иначе возвращает false.

Используйте rowCount() для родителя, чтобы узнать количество детей.

А как насчет детей:

Const QObjectList & QObject :: дети() константные

Возвращает список дочерних объектов.

Это не вы на самом деле хотите.

Таким образом, вы должны использовать QStandardItemModel::rowCount вместо children();