2015-07-17 6 views
0

TreeView Показывает мои данные не правильно. Что не так?Почему TreeView Показывает данные не правильно?

Вот функция добавления ребенка

bool TreeModel::addChild(const QVariant &data, const QModelIndex &parent) 
{ 
    Task *parentTask; 
    if (!parent.isValid()){ 

     qDebug() << "addChild() - parent is not valid"; 
     parentTask = rootItem; 
    } 
    else 
     parentTask = static_cast<Task*>(parent.internalPointer()); 

    Task *childTask = new Task(data, parentTask); 
    qDebug() << QString::number((int)childTask);/// 

    int childCount = childTask->childCount(); 
    emit beginInsertRows(parent, childCount, childCount); 
    parentTask->appendChild(childTask); 

    emit endInsertRows(); 
    //emit dataChanged(parent, parent); 

    return true; 

} 

В некоторых ситуациях, требующих эту функцию из QML делает беспорядок с индексами в QML. В нем отображаются неправильные элементы или недопустимые элементы, особенно если у родителя есть задачи с дочерними элементами (2 уровня дерева). Что не так?

ответ

1

Вы указываете неправильное количество детей пользователям модели.

Вместо int childCount = childTask->childCount();, вы должны иметь

int childCount = parentTask->childCount(); 

Поскольку это только структурные изменения, вы должны никогда испускают dataChanged сигнал. Данные родителя имеют не изменены. Его структура имеет. Модели Qt различают структурные и изменения данных. Методы begin.../end... указывают на структурные изменения. Единственное место, которое вы должны испускать dataChanged, находится из местоположения, которое имеет эффект от звонка Model::setData на существующих. См., Например, this answer.

 Смежные вопросы

  • Нет связанных вопросов^_^