РЕДАКТИРОВАТЬ
Создайте новый управляющий класс в C ++ для обработки ваших веб-запросов, затем установите свойство контекста root или зарегистрируйте тип в QML и используйте вместо этого API-интерфейс C ++.
Вот самый простой способ go:
в myclass. cpp вы создаете метод с этим типом кода вместе с соответствующими обработчиками (replyFinished)
Убедитесь, что метод, который вы хотите вызвать из QML, имеет префикс Q_INVOKABLE в заголовочном файле (прямо перед void)
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
-
Теперь вы просто регистрируете тип и создаете экземпляр в основном. cpp
qmlRegisterType<MyClass>("MyClass", 1,0, "MyClass");
-
и в своем файле QML выполните
import MyClass 1.0
Window {
MyClass {
id: myNetworkClass
}
function doLookup() { myNetworkClass.myCustomMethod(); }
}
Это даст вам стабильный способ избежать проблем с QML это происходит из-за запуска собственной javascript среды, которая асинхронна и слабо типизирована в строго типизированной среде ...
Удачи!
ORIGINAL
Во-первых, вы оставляете привязанные ссылки на объекты, создавая То есть без сохранения ссылки на созданный объект ...
Храните массив всех объектов XMLHttpRequest в свойстве Window
Window
{
property var requests: []
// ...
Timer {
onTriggered: {
// add request to array
requests.push(xhttp);
}
}
}
Затем, возможно, начните удалять объекты в вашем массиве с помощью. ..
var xhttp = requests.unshift()
xhttp.destroy()
Но реальная проблема заключается в отправке http-запросов с интервалами 50 мс
Это 20 мм / сек или 1200 / мин запросов
Возможно, вы захотите настроить код для отправки запроса после завершения предыдущего .. или для более высокого значения интервала