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级树)时。 有什么问题?
答案 0 :(得分:1)
您向模特的用户显示错误的子女数量。
而不是int childCount = childTask->childCount();
,你应该
int childCount = parentTask->childCount();
由于这只是一个结构变化,你应该永远发出dataChanged
信号。父母的数据未已更改。它的结构有。 Qt的模型区分结构和数据变化。 begin...
/ end...
方法表示结构更改。您应该发出dataChanged
的唯一位置来自一个在现有项目上调用Model::setData
的位置。有关详细信息,请参阅this answer。