如何编写 if 语句,比较在 QML 中有条件地创建对象的数字



我正在使用QML和Python3.6 + PySide2,我正在尝试用QML编写脚本,该脚本从python中的连接中获取两个整数并进行比较以决定用于窗口的图像背景。

有几件事我正在努力解决。首先,我不确定如何比较我的数值(日落和日出(变量。其次,我不知道如何编写一个有条件地生成背景图像的 if 语句式部分。第三,我认为最好不要在连接下执行此操作,甚至可能在我的 QML 中执行此操作,但我不确定如何将我的变量移动到其他地方。

我真的很感谢任何指示或帮助!!

我从中提取的数据如下所示: "日出":1592565499,"日落":1592617094

QML伪代码:

Connections {
target: weather
function onDataChanged(){
if(!weather.hasError()){
var sunrise = weather.data['dt']['sunrise']
var sunset = weather.data['dt']['sunset']
if (sunrise <= sunset)
Image {
source: "night.png"}
else 
Image {
course: "day.png"}
}

你不能从这样的 if 语句创建 QML 项目(也不能从State's(。如果您愿意,可以调用Qt.createComponent,但是,在此示例中,这是矫枉过正的。应直接设置映像的source属性:

Image {
id: image_tod
}
Connections {
target: weather
function onDataChanged(){
if(!weather.hasError()){
var sunrise = weather.data['dt']['sunrise']
var sunset = weather.data['dt']['sunset']
if (sunrise <= sunset)
image_tod.source = "night.png"
else 
image_tod.source = "day.png"
}
}
}

查看代码,您实际上可能能够将其直接绑定到source属性(不确定您的模型到底是什么样子(:

Image {
source: {
if(weather.data['dt']['sunrise'] <= weather.data['dt']['sunset'])
return "night.png"
else
return "day.png"
}
}

这是因为在编译 QML 时,引擎会从每个引用的变量(在本例中为weatherdata(创建一个依赖项,并在其中任何一个表示更改时重新评估整个绑定。要充分利用这一点,您还应该将hasError公开为属性而不是函数(并在它发生变化时发出(。

<小时 />

后续更新

是的,你可以随心所欲地让它变得狂野。我想你的意思是:

Image {
source: {
if(weather.data['dt']['sunrise'] <= weather.data['dt']['sunset'])
return "night.png"
else if(weather.data['dt']['sunrise'] > weather.data['dt']['sunset'])
return "day.png"
else
return "" //means no image
}
}

最新更新