QML如何在更改为另一个QML时保存变量值



我想在更改QML时保存变量的值,然后再次返回到同一个QML。我该怎么做?当我打开相应的QML后,valuıe变为零。我使用loader从main.qml打开新的qml。

RightButtons
{
MultiPointTouchArea
{
onPressed:
{
pageLoader.source="CTISpage.qml"
}
}
}

这是我的装载机

Loader
{
id:pageLoader
Connections
{
target:pageLoader.item
onBackButtonPressed:
{
pageLoader.source=""
}
}
}

因此,当我按下按钮时,我将加载程序设置为新的源代码并打开页面,当我按后退按钮时,从新页面,我将加载器的源代码设置为空字符串,并使其返回到我的main.qml。

问题是:在新的qml中,我使用了一个布尔变量,我想在返回main.qml和返回这个qml之间保存它的值。但在这个过程中,它总是被归零。以下是我的新qml的样子:

Item
{
id: CTISPage.qml
.
.
.
signal backButtonPressed()
property var isABSOffRoad:false
.
.
.
LeftButtons
{
MultiPointTouchArea
{
onPressed:
{
isABSOffRoad=!isABSOffRoad
if(ABSOffRoad)
{
//Do sth if it is true
}
}
}
}
}

当我按下按钮并将布尔值isABSOffRoad变量设置为true时,当我返回main并再次返回此qml时,它将变为false。我还试图在main中声明布尔变量,然后从这个qml中获取该变量。然而,结果是一样的。我还尝试打开一个新的variables.qml文件,并在该qml中声明所有变量,然后从那里访问它们。但这也没有奏效。我怎样才能找到解决这个问题的方法?

Loader将根据设置source和/或active创建并销毁它所指向的组件。这意味着下次您将使用Item组件的新实例化,因此isABSOffRoad将恢复为其默认值false

如果你想让这种状态持续下去,有两条基本路线:

  1. 不要卸载组件-换句话说,删除将source设置为""的代码。您可以使用visible来隐藏它。这样组件就不会被破坏,isABSOffRoad将保留其设置值。

  2. isABSOffRoad属性添加到父组件,并使用Loader.setSource()将其当前值传递到加载的组件。然后,当isABSOffRoad发生更改时,您可以使用信号通知父组件,以便它可以在组件卸载之前捕获并保持新值。

最新更新