Тип QML WorkerScript
Позволяет использовать потоки в приложении Qt Quick Подробнее...
| Заявление об импорте: | import . |
Свойства
- source : url
Сигналы
- message(jsobject msg)
Методы
- sendMessage(jsobject message)
Подробное описание
Используйте WorkerScript для выполнения операций в новом потоке. Это полезно для выполнения операций в фоновом режиме, чтобы основной поток GUI не блокировался.
Сообщения могут передаваться между новым потоком и родительским потоком с помощью sendMessage() и обработчика onMessage().
Пример:
import QtQuick 2.0
Rectangle {
width: 300; height: 300
Text {
id: myText
text: 'Click anywhere'
}
WorkerScript {
id: myWorker
source: "script.js"
onMessage: myText.text = messageObject.reply
}
MouseArea {
anchors.fill: parent
onClicked: myWorker.sendMessage({ 'x': mouse.x, 'y': mouse.y })
}
} Вышеуказанный скрипт WorkerScript указывает на файл JavaScript «script.js», который обрабатывает операции, выполняемые в новом потоке. Вот script.js:
WorkerScript.onMessage = function(message) {
// ... long-running operations and calculations are done here
WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
} Когда пользователь щелкает в любом месте прямоугольника, вызывается sendMessage(), что запускает обработчик WorkerScript.onMessage() в script.js. Это, в свою очередь, отправляет ответное сообщение, которое затем получает обработчик onMessage() myWorker.
Ограничения
Поскольку функция WorkerScript.onMessage() выполняется в отдельном потоке, файл JavaScript оценивается в контексте, отдельном от основного движка QML. Это означает, что в отличие от обычного файла JavaScript, импортированного в QML, script.js в приведенном выше примере не может получить доступ к свойствам, методам или другим атрибутам элемента QML, а также не может получить доступ к свойствам контекста, установленным на объект QML через QQmlContext.
Кроме того, существуют ограничения на типы значений, которые можно передавать в скрипт WorkerScript и из него. Подробности см. в документации sendMessage().
Скрипт WorkerScript не может использовать синтаксис .import.
См. также Примеры Qt Quick - Потоки и Пример Threaded ListModel.
Документация по свойствам
source : url
Здесь хранится URL-адрес файла JavaScript, реализующего обработчик WorkerScript.onMessage() для операций в потоке.
Документация по сигналам
message(jsobject msg)
Этот сигнал генерируется при получении сообщения msg из скрипта WorkerScript в другом потоке посредством вызова sendMessage().
Соответствующий обработчик — onMessage.
Документация по методам
sendMessage(jsobject message)
Отправляет указанное сообщение message обработчику скрипта WorkerScript в другом потоке. Другой обработчик скрипта WorkerScript может получить это сообщение через обработчик onMessage().
Объект message может содержать только значения следующих типов:
- boolean, number, string
- объекты и массивы JavaScript
- объекты ListModel (любой другой тип QObject* запрещен)
Все объекты и массивы копируются в message. За исключением объектов ListModel, любые изменения в другом потоке объекта, переданного в message, не будут отражены в исходном объекте.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qml-workerscript.html