QT MVC模式不更新视图特定的SimpleTreeModel示例

时间:2017-10-21 19:40:13

标签: c++ qt

我在自己的代码中遇到问题,以便在更新模型数据后更新视图。

然后,我从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";
}

1 个答案:

答案 0 :(得分:1)

SimpleTreeModel示例仅适用于静态模型。它没有实现所需的QAbstractItemModel函数来更新模型。

查看模型文档的detailed description,了解应该实施的内容。

问题是,默认情况下所需的方法是作为空方法实现的,因此如果缺少某些内容,您将不会收到任何错误消息。它将无法正常工作。

此外,做必要的数据更改发射有点棘手。

setData 方法中,您必须emit dataChanged()

在必要的 insertRows 中,你必须调用方法beginInsertRows(...)endInsertRows()才能获得所需的信号。

MV范式的第一种方法是使用 QStandardItemModel 。如果 QStandardItem 足够通常,它将提供所有必要的实现。