为什么TreeView显示数据不正确?

时间:2015-07-17 10:13:34

标签: qt model-view-controller treeview qtquick2 qt-quick

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

答案 0 :(得分:1)

您向模特的用户显示错误的子女数量。

而不是int childCount = childTask->childCount();,你应该

int childCount = parentTask->childCount();

由于这只是一个结构变化,你应该永远发出dataChanged信号。父母的数据已更改。它的结构有。 Qt的模型区分结构和数据变化。 begin... / end...方法表示结构更改。您应该发出dataChanged的唯一位置来自一个在现有项目上调用Model::setData的位置。有关详细信息,请参阅this answer