QML是否支持多线程/异步调用?
我正在用QML构建一个用户界面,现在只专注于界面的逻辑,应用程序的逻辑留到以后再做。我有点担心我看到的关于多线程、异步和同步代码的讨论,以及用户界面变慢的问题。我想确保等我以后添加应用程序逻辑时,QML不会因为强制使用单线程的异步代码而拖慢我的进度。
也许这听起来有点荒谬,但请理解我对非网页的图形用户界面工作还是个新手。我来自于美好的JavaScript世界,在那里所有的用户界面事件都是异步的,不会阻塞。
有没有人有这方面的经验,使用过Python或C++的?
1 个回答
4
这里有一个几乎可以直接用的答案: https://stackoverflow.com/a/16037815/867349
简单来说,你可以在QML中使用WorkerScript,这样你用JavaScript/QML写的功能就可以真正做到异步(不过遗憾的是,我找不到停止或结束这个单独工作线程的方法)。
另一个选择是使用Qt的QThread
。你可以在这里了解Qt中的多线程: Qt中的多线程技术 | QtDoc 5.3, 线程基础 | QtDoc 5.3,还有我最喜欢的关于Qt的书,这本书在你的情况下会非常有用: 高级Qt编程:用C++和Qt 4创建优秀软件)。然后把你的线程暴露给QML。关于如何将C++类暴露给QML,你可以在这里阅读: QML和C++的集成 | QtQml 5.3, 从C++定义QML类型 | QtQml 5.3。