Вы не можете создавать QML-элементы из таких операторов if (как и из State
). Вы можете позвонить по номеру 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 движок создает зависимость от каждой ссылочной переменной (weather
и data
в данном случае) и повторно оценивает всю привязку, если любой из них сигнализирует об изменении. Чтобы в полной мере использовать это, вы должны также предоставить 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
}
}