簡體   English   中英

在QML中通過鼠標單擊推動數組中的項目時,不會調用Array的onChanged屬性

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

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);
      }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM