- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 BusyIndicator,它应该在进行大量计算时旋转并在计算完成时停止。
我认为 WorkerScript 是正确的方法,但是 from here , .js 文件中的辅助(计算线程)似乎无法访问主 .qml 线程的对象。
这是有问题的,因为我的所有计算都是通过由主线程实例化的 Controller C++ 定义的 QObject 执行的。
这是我的代码:
main.qml
import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.0
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.2
import LcQml 1.0
ApplicationWindow
{
id: window
UiController
{
id: uiController
}
WorkerScript
{
id: importScanWorkerScript
source: "importScanWorkerScript.js"
onMessage:
{
busyIndicator.running = false;
}
}
FileDialog
{
id: importScanDialog
visible: false
title: "Import a [scan] file"
folder: "MyScannedScenesFolder"
nameFilters: [ "STL files (*stl)" ]
selectedNameFilter: "STL files (*stl)"
onAccepted:
{
importScanWorkerScript.sendMessage({'filepath': importScanDialog.fileUrl})
busyIndicator.running = true;
}
}
BusyIndicator
{
id: busyIndicator
running: false
anchors.centerIn: parent
}
}
importScanWorkerScript.js
WorkerScript.onMessage = function(message)
{
uiController.onImportScanDevMenuClicked(message.filepath);
WorkerScript.sendMessage()
}
Pb: uiController 未在 importScanWorkerScript.js 中定义。
我应该理解 WorkerScript 只能处理简单的情况吗?
最佳答案
正如您已经注意到的,WorkerScript
无法访问 UI 控件。但是您的单独线程可以使用消息与主 UI 线程“交谈”。至于我,它的工作原理与所有其他语言/框架完全一样。每当您想更新 UI 或您的对象时,只需从线程发送一条消息。例如:
WorkerScript.onMessage = function(message) {
WorkerScript.sendMessage({ 'action': 'start' })
// do some heavy task here
WorkerScript.sendMessage({ 'action': 'finish', 'data': somedata })
}
因此您的主要 qml 可能如下所示:
WorkerScript {
id: myWorker
source: "func.js"
onMessage: {
switch(messageObject.action)
{
case 'start':
spinner.running = true;
uiController.doSomething();
break;
case 'finish':
spinner.running = false;
uiController.doSomethingAnother();
break;
}
}
}
关于c++ - WorkerScript 访问 Controller 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752428/
使用 QML WorkerScript 时,请求(通过 postMessage() 发送)是否已排队(并在单个处理程序线程上执行),或者是否存在可能性/危险两个连续的 postMessage() 将在
我有一个 BusyIndicator,它应该在进行大量计算时旋转并在计算完成时停止。 我认为 WorkerScript 是正确的方法,但是 from here , .js 文件中的辅助(计算线程)
我有一个缓慢的 I/O 操作,我需要从 QML UI 进行控制。 I/O 接口(interface)在 C++ 中。基本上,当用户按下按钮时,我需要发送消息并从设备获得响应。我希望用户在等待响应时能够
如何从 Qt Quick WorkerScript 调用 Python 方法? 序言: 我已成功通过注册 QObject 的子类从 QML 应用程序访问我的 Python 方法: class Foo(
我是一名优秀的程序员,十分优秀!