Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组';s onChanged属性不';在QML中的鼠标点击上推送其中的项目时,不会被调用 Access.qml main.qml 输出(鼠标点击):_Javascript_Qt_Qml_Qtquick2 - Fatal编程技术网

Javascript 数组';s onChanged属性不';在QML中的鼠标点击上推送其中的项目时,不会被调用 Access.qml main.qml 输出(鼠标点击):

Javascript 数组';s onChanged属性不';在QML中的鼠标点击上推送其中的项目时,不会被调用 Access.qml main.qml 输出(鼠标点击):,javascript,qt,qml,qtquick2,Javascript,Qt,Qml,Qtquick2,当我在pp中推送项目时,为什么没有调用onPpChanged?我该怎么做才能调用它呢?这是因为QML中的数组不是QML对象。报告说: 此外,由于[…]不是QML对象,因此更改其单个值不会触发属性更改通知。如果上面的示例有onNumberChanged或onAnimalChanged信号处理程序,则不会调用它们。但是,如果项目或属性本身被重新分配给不同的值,则将调用此类处理程序 因此,要使代码正常工作,您需要在修改数组时自己抛出信号。因此,您的代码应该如下所示: MouseArea {

当我在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);
      }
  }
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
  MouseArea
  {
      anchors.fill: parent
      onClicked:
      {
          pp.push(inde++);
          ppChanged();
          console.log("mousearea shows pp's length: " + pp.length);
      }
  }