【问题标题】:Why TreeView Shows data not correctly?为什么 TreeView 显示数据不正确?
【发布时间】:2015-07-17 10:13:34
【问题描述】:

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 级树)。 怎么了?

【问题讨论】:

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


    【解决方案1】:

    您向模型的用户指示了错误的孩子数量。

    你应该有,而不是int childCount = childTask-&gt;childCount();

    int childCount = parentTask->childCount();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多