gpt4 book ai didi

c++ - QT MVC 模式不更新 View - 特定的 SimpleTreeModel 示例

转载 作者:行者123 更新时间:2023-11-30 05:08:24 27 4
gpt4 key购买 nike

我自己的代码在更新模型数据后更新 View 时遇到了问题。

然后我从 QT 中获取了 SimpleTree 示例,并在 TreeModel 中添加了一个计时器以在 10 秒后更改数据,然后调用构造函数中使用的相同设置数据函数来更新模型。下面的代码用于在计时器超时时执行的插槽。无论我尝试什么, View 都不会更新。 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";
}

最佳答案

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

看看 detailed description模型文档,以便查看应实现的内容。

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

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

setData 方法中,您必须发出 dataChanged()

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

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

关于c++ - QT MVC 模式不更新 View - 特定的 SimpleTreeModel 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com