当QStandardItemModel itemChanged发出信号时,究竟发生了什么变化

时间:2009-08-27 11:16:23

标签: user-interface qt

QStandardItemModel中有信号,当项目数据发生变化时会发出信号。 通常我们为这个信号连接一个处理程序,并在处理程序例程中完成所有工作。

此类句柄例程仅获取指向该项目的指针。 使用此指针可以访问项目的数据。 但是,我们不知道究竟发生了什么变化...我们只有更新的价值。

如果项目数据有多个角色,我希望能够准确地获得哪个角色(数据)已被更改以及之前的值是什么。

2 个答案:

答案 0 :(得分:5)

通常,QStandardItemModel用于非常简单的数据建模。如果你想进入像你想象的更高级的东西,你应该研究子类化QAbstractItemModel或其中一个抽象派生词:Model/View classes

这可能看起来很多,但请使用示例和推荐指南:Model/View programmingModel subclassing,奖励会很棒。

答案 1 :(得分:0)

Qt的标准信号无法做到这一点。我建议为此添加另一个信号。

对于我自己的模型,我通常使用这种方法:我有一个根实例,其中包含指向数据模型所有部分的指针。我模型中的项目使用此根实例发送信号,如

itemChanged(item, attribute, oldValue, newValue)

表示简单属性。列表等也是如此;只有在这里,我有几个信号取决于动作,例如:

itemAdded(list, item, index)

[编辑] QT信号处理非常基础。通常,它只会告诉“某些事情发生了变化”。没有人支持“究竟发生了什么变化?”因为你大部分时间都不需要它。因此,如果您需要这些信息,您必须自己完成。您不能单独使用角色,因为角色必须由项目中的某些内容支持。您可以做的是向项目添加更改信息,并在请求角色时读取更改信息。但这不是“开箱即用”支持的东西。