【发布时间】:2017-08-18 08:49:17
【问题描述】:
我有一个 BusyIndicator,它应该在进行大量计算时旋转,并在计算完成时停止。
我认为 WorkerScript 是正确的方法,但是 from here,似乎 .js 文件中的辅助(计算线程)无权访问主 .qml 线程的对象。
这是有问题的,因为我所有的计算都是通过主线程实例化的控制器 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 只能处理简单的情况吗?
【问题讨论】:
标签: c++ qt qml qtquick2 qtquickcontrols2