0

我正在尝试使用从另一个平台移植的数据模型在 Qt 中实现 MVC。我在屏幕上有几个小部件,每个小部件都听同一个模型来呈现数据。用户还可以与这些小部件进行交互、编辑它们,从而将更改推送回模型中。

我遇到的具体问题是,如果我的(移植的)数据模型发生变化,并且我将数据推送到带有 setData 的 QTreeWidgetItem 中,则小部件会发出 itemChanged 信号。这反过来会触发监控用户编辑的控制器代码,并使其将相同的数据推送回模型。除非我在某处插入数据比较,否则我最终会陷入无限循环。

控制器是否有某种方法可以在不发出 itemChanged 的​​情况下悄悄更新项目的数据?或者,是否有更好的方法来区分用户对小部件的编辑和编程更改?我只是在听 itemChanged。

4

1 回答 1

0

控制器是否有某种方法可以在不发出 itemChanged 的​​情况下悄悄更新项目的数据?

我希望不是。如果我有一个视图,我不喜欢它显示错误的数据,因为有人偷偷改变了模型。恐怕,你必须自己想出一些东西。你必须修改你的控制器。没有发出 itemChanged 时......可怕的想法。

我在想,你能做什么。期望没有完整的解决方案。我只是环顾四周,我会怎么做。您必须对您的模型进行分类并覆盖 setData 方法。然后你可以通过角色来区分变化。Qt::EditRole 或者您可以创建自己的用户定义角色。在任何情况下都必须发出 itemChanged 信号。否则你的观点是错误的。但是在您的模型子类中,您可以实现一个新信号“dataChangedByUser”或其他任何信号,它可以另外发送到 itemChanged。你的控制器如何处理这个......

于 2013-08-12T17:52:28.997 回答