首先,我只用C和Qml真正编码,感觉就像是最酷最痛苦的语言。另外,只写了C,我对Qml术语并不完全流利,所以请耐心等待。
我有一个项目,其中主qml文件具有不同的状态,这会带来不同的"页面"。所以"页面"在一个单独的Qml文件中定义,该页面的实例在main.qml中创建,该实例将根据main.qml的状态可见。我想要可以在这些页面之间共享/更新的全局变量,因为一个页面显示的内容将取决于在另一个页面中发生变化的变量(例如按下按钮)。第一页将有多个按钮用于不同的选项,第二页将显示相同的格式,但具有与所选选项对应的信息。我一直试图通过使用JavaScript库as discussed here来实现这一点,我通常能够在各个文件中操作和引用变量,但这些更改似乎没有转移到其他文件。我怀疑每个文件都导入一个唯一的"实例"的图书馆。如何使这个库的功能类似于Qml中的C头文件?
一些简单的示例代码:
Var.js
//Var.js
.pragma library
var option = 1
main.qml
//main.qml
import QtQuick 2.0
import "Var.js" as Var
Rectangle {
id: page
state: "HOME_PAGE"
...
Home_page{
id: home_page
objectName: "home_page"
visible: true
...
}
Option_page{
id: option_page
objectName: "option_page"
visible: false
...
}
states: [
State {
name: "HOME_PAGE"
PropertyChanges { target: home_page; visible: true}
PropertyChanges { target: option_page; visible: false}
},
State {
name: "OPTION_PAGE"
PropertyChanges { target: home_page; visible: false}
PropertyChanges { target: option_page; visible: true}
}
]
home_page.qml
//home_page.qml
import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import "Var.js" as Var
Rectangle {
id: home_page
objectName: "home_page"
...
Button {
id: option1_button
...
onClicked: {
Var.option = 1
page.state = "OPTION_PAGE"
}
}
Button {
id: option2_button
...
onClicked: {
Var.option = 2
page.state = "OPTION_PAGE"
}
}
etc...
}
option_page.qml
//option_page.qml
import QtQuick 2.0
import "Var.js" as Var
Rectangle {
id: option_page
objectName: "option_page"
...
Text {
...
text: "Option " + Var.option
}
}
我尝试了上面链接中提到的单例方法但无法使其工作。我也尝试在库中创建一个JS函数来操作变量,然后从Qml中调用它,但是无济于事。
如果它有帮助我也在单个文件中遇到JS全局变量的问题。我一直在使用第三方qml对象作为按钮列表,我希望根据按下的按钮更新全局变量。当我显示变量时,通过文本对象,它不会在按下按钮时更新,但如果我也显示它,原始属性正在更新,则它会更新。
即
这不会更新全局变量
Text {
...
text: "Option " + Var.button_pressed
}
ThirdPartyButtonList {
id:button_list
...
onIndexChanged:{
Var.button_pressed = index
}
}
但是这样做
Text {
...
text: "Option " + Var.button_pressed + " " + button_list.index
}
ThirdPartyButtonList {
id: button_list
...
onIndexChanged:{
Var.button_pressed = index
}
}