代码之家  ›  专栏  ›  技术社区  ›  alexkr

当qstandarditemmodel itemchanged发出信号时,究竟发生了什么变化?

  •  4
  • alexkr  · 技术社区  · 15 年前

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

    这样的句柄例程只获取指向该项的指针。 使用此指针可以访问项的数据。 然而,我们不知道到底发生了什么变化…我们只更新了价值。

    如果项数据有多个角色,我希望能够准确地获取更改的角色(数据)和前一个值。

    2 回复  |  直到 11 年前
        1
  •  5
  •   Adam W    15 年前

    一般来说, QStandardItemModel 用于非常简单的数据建模。如果你想了解更高级的东西,比如你所描述的,你应该研究子类化。 QAbstractItemModel 或者它的抽象衍生物之一: Model/View classes

    这看起来可能有很多工作,但请使用示例和参考指南: Model/View programming ,请 Model subclassing 而且回报也将是巨大的。

        2
  •  0
  •   Aaron Digulla    15 年前

    这是不可能的标准信号的qt。我建议再加一个信号。

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

    itemChanged(item, attribute, oldValue, newValue)
    

    简单属性。列表和类似内容也是如此;仅在这里,根据操作,我有几个信号,例如:

    itemAdded(list, item, index)
    

    [编辑]QT信号处理非常基本。通常,它只会告诉你“有些事情已经改变了”。不支持“到底发生了什么变化?”因为你大部分时间都不需要它。所以如果你需要这些信息,你必须自己去做。不能单独使用角色,因为角色必须由项目中的某个内容支持。您可以做的是将更改信息添加到项目中,并在请求角色时阅读该信息。但这不是“开箱即用”的支持。