我在自己的代码中遇到问题,以便在更新模型数据后更新视图。
然后,我从QT中获取了SimpleTree示例,并在TreeModel中添加了一个计时器,以便在10秒后更改数据,然后调用构造函数中使用的相同set数据函数来更新模型。下面的代码是在定时器超时时执行的插槽。无论我尝试什么,视图都不会更新。 setDate和emit dataChanged是一些尝试。
在我自己的代码中,我有一个XML-RPC调用更新数据,但考虑到我甚至没有让simpleTreeModel工作,我想这将是一个很长的镜头。
我在这里缺少一些基本的东西吗?
void TreeModel::slotTimeout(void)
{
QStringList tmp;
tmp << "qaz";
tmp << "wsx";
tmp << "edc";
setupModelData(tmp,rootItem);
setData(QModelIndex(),QModelIndex());
emit dataChanged(QModelIndex(), QModelIndex());
qDebug() << "Timer update";
}
答案 0 :(得分:1)
SimpleTreeModel示例仅适用于静态模型。它没有实现所需的QAbstractItemModel函数来更新模型。
查看模型文档的detailed description,了解应该实施的内容。
问题是,默认情况下所需的方法是作为空方法实现的,因此如果缺少某些内容,您将不会收到任何错误消息。它将无法正常工作。
此外,做必要的数据更改发射有点棘手。
在 setData 方法中,您必须emit dataChanged()
。
在必要的 insertRows 中,你必须调用方法beginInsertRows(...)
和endInsertRows()
才能获得所需的信号。
MV范式的第一种方法是使用 QStandardItemModel 。如果 QStandardItem 足够通常,它将提供所有必要的实现。