数组's onChanged属性没有'当在QML中点击鼠标时,推送其中的项目时,不会被调用

Array's onChanged property doesn't get called when pushing items in it on mouseclicks in QML

本文关键字:调用 项目 属性 onChanged 当在 数组 QML 鼠标      更新时间:2023-09-26

Access.qml

import QtQuick 2.0
Rectangle {
    id: newq
    width: 100
    height: 62
    property var pp : [1]
    onPpChanged:
    {
        console.log("'non pp changed, show pp's length: " +  pp.length)
    }
    property int inde : 0
    MouseArea
    {
        anchors.fill: parent
        onClicked:
        {
            pp.push (inde++)
            console.log("mousearea shows pp's length: " + pp.length)
        }
    }
}

main.qml

import QtQuick 2.0
Rectangle {
    id: root
    width: 360
    height: 360
    Access
    {
        color: "red"
    }
}

输出(单击鼠标(:

QML debugging is enabled. Only use this in a safe environment.
on pp changed, show pp's length: 1
mousearea shows pp's length: 2
mousearea shows pp's length: 3
mousearea shows pp's length: 4
mousearea shows pp's length: 5

当我推送pp中的项目时,为什么没有调用onPpChanged?我该怎么办才能叫它

这是因为QML中的数组不是QML对象。文件上写着:

此外,由于[…]不是QML对象,更改它们各自的值不会触发属性更改通知。如果上面的例子有onNumberChanged或onAnimalChanged信号处理程序,它们就不会被调用。但是,如果项或属性属性本身被重新分配给不同的值,则会调用这样的处理程序。

因此,为了让代码正常工作,您需要在修改数组时自己抛出信号。所以你的代码应该是这样的:

  MouseArea
  {
      anchors.fill: parent
      onClicked:
      {
          pp.push(inde++);
          ppChanged();
          console.log("mousearea shows pp's length: " + pp.length);
      }
  }