私のアプリケーション(Weather.qml)の一部は、現在、タイマーとGPS座標を使用して5分ごとに天気のHTTP GET要求を行います。また、ユーザーが場所を選択できるようにするユーザー設定(Settings.qml)もあります。Qt - タイマを早期に起動し、引数をタイマに渡す方法はありますか?
場所の設定が変更されたときにTimerをトリガーし、Timerが新しい座標を取得してHTTP Get要求に渡すことができるかどうかは疑問でした。
現時点では、起動時に実行可能ファイルにGPS座標を引数(weatherLocation
)として渡しています。
Weather.qml
WeatherForm {
// A timer to refresh the forecast every 5 minutes
Timer {
interval: 300000
repeat: true
triggeredOnStart: true
running: true
onTriggered: {
if (weatherAppKey != "" && weatherLocation != "") {
// Make HTTP GET request and parse the result
var xhr = new XMLHttpRequest;
xhr.open("GET",
"https://api.darksky.net/forecast/"
+ weatherAppKey + "/"
+ weatherLocation
+ "?exclude=[minutely,hourly,daily,alerts,flags]"
+ "&units=auto");
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
var a = JSON.parse(xhr.responseText);
parseWeatherData(a);
}
}
xhr.send();
} else {
...
}
}
}
...
}
Settings.qml
SettingsForm {
Rectangle {
...
ComboBox {
id: cityComboBox
anchors.right: parent.right
anchors.verticalCenter: parent.Center
model: ListModel {
id: cbItems
ListElement { city: "Vancouver"; coordinates: "49.2666,-123.1976" }
ListElement { city: "New York"; coordinates: "40.7306,-73.9866" }
ListElement { city: "Hong Kong"; coordinates: "22.2793,114.1628" }
}
textRole: 'city'
// Trigger the Timer here possibly
onCurrentIndexChanged: console.debug(cbItems.get(currentIndex).city)
}
}
}
ありがとうございます。私は間違った方向にも問題に取り組んでいることに気付きました。私は、HTTP.GETコードをWeather.qmlの独自の関数に分離し、Connectionsを使用してSettings.qmlから関数を呼び出すことになりました。私の主なQMLコンポーネントに 'location'変数を置くことはもっときれいかもしれませんが、私はそれについても見ていきます。 – CudB