gpt4 book ai didi

qt - 更新 QML 中 var 属性的绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 12:51:56 27 4
gpt4 key购买 nike

如果你看一下this page它注意到当对象更改时,绑定(bind)到 var 属性不会自动更新:

Item {
property var car: new Object({wheels: 4})

Text {
text: "The car has " + car.wheels + " wheels";
}

Component.onCompleted: {
car.wheels = 6;
}
}

这会说“汽车有 4 个轮子”,因为 car.wheels = 6; 不会自动触发更新。

页面没有说明如何解决这个问题?如何手动触发更新(无需替换整个 car 对象)。

编辑:明确地说,我不想替换整个 car 对象,我确实想使用 property var(我的实际属性是一个 javascript 对象,不能存储在任何原生 QML 属性类型中)。

编辑 2:这是一个使用 QtObject 的示例,它不起作用(它说“汽车有 0 个轮子。”):

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2

ApplicationWindow {
width: 640
height: 480
visible: true

property var car: QtObject { property var wheels: [] }

Item {

Text {
text: "The car has " + car.wheels.length + " wheels";
}

Component.onCompleted: {
car.wheels.push("Rear-left");
car.wheels.push("Rear-right");
car.wheels.push("Front-left");
car.wheels.push("Front-right");
}
}
}

最佳答案

实际上,页面确实说明了如何解决这个问题:

If the onCompleted handler instead had "car = new Object({wheels: 6})" then the text would be updated to say "The car has 6 wheels", since the car property itself would be changed, which causes a change notification to be emitted.

尽管我认为这违背了您不替换整个 car 对象的要求。

话虽如此,(至少)还有一个选择——使用 QtObject :

Item
{
property var car: QtObject { property int wheels: 4 }

Text {
text: "The car has " + car.wheels + " wheels";
}

Component.onCompleted: {
car.wheels = 6; // This will update the text
}
}

编辑

鉴于新示例,如果您需要使用包含基本类型的 Javascript 数组,您列出的代码将不会触发更新。但是,如果您能够使用包含 QML 类型的 list,则可以使用以下解决方法:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2

ApplicationWindow {
id: window
width: 640
height: 480
visible: true

property var car: QtObject { property list<Item> wheels }

Component
{
id: wheelComponent
QtObject
{
property var wheelName;
}
}

Text
{
anchors.fill: parent
text: "The car has " + car.wheels.length + " wheels";

Component.onCompleted:
{
var wheel = wheelComponent.createObject(window, {"wheelName": "Rear-left"} );
car.wheels += wheel;
}
}
}

这对于您的需求来说可能有些苛刻。创建 property bool update 并在您更改数组时更改它的 hack 方法可能更可取。

关于qt - 更新 QML 中 var 属性的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com