我想知道是否可以在QML中使用async function 像这样:
async function additem(clientName){
myListModel.append({name:clientName});
}
而不是使用它:
function additem(clientName){
myListModel.append({name:clientName});
}
我已经尝试了,我收到了语法错误:预期令牌:'`,找不到任何关于 QML支持JavaScript“async function”的文档。
任何想法为什么会这样?或者可能是否在JS中有任何其他方法可以在QML中使用异步?
注意:我想将数据附加到 ListModel ,我希望将其视为其进度和我不知道我希望整个应用程序冻结,直到整个数据附加到模型。
感谢您的时间。
答案 0 :(得分:0)
我回答了你发布到Qt论坛的这个问题的扩展版本的一部分,但没有解决异步部分。
从您在此处提供的示例中,您不清楚为什么要查找异步函数调用,因为您在此处发布的示例是一个基本上即时的函数,它不会#&# 39; t导致任何东西被锁定。
您能否详细解释一下您尝试做什么以及如何冻结用户界面?
如果问题是您正在执行
function additem(clientName){
myListModel.append({name:clientName});
}
在一个紧凑的循环中一千次,这就是为什么你的UI被冻结,我可以想到一些可能的解决方案。
一种是定期调用(在每个addItem之后或每10或20个addItem之后)ListView的forceLayout()方法 - http://doc.qt.io/qt-5/qml-qtquick-listview.html#forceLayout-method - 用于强制更新ListView以便您的UI反映模型的变化。
对于这种特殊情况,这可能是最简单的解决方案。
对于您可能需要异步函数的其他实例,您可以尝试使用具有短周期(例如20 ms)的Timer来执行任务子集,然后更新UI(或执行任何操作),然后执行另一批任务,等等。
在其他一些情况下,您可能会发现使用回调函数很有用,即调用函数并忘记它,但是传递一个回调函数,以便在它完成工作时执行。
答案 1 :(得分:-3)
QML有它!
使用WorkerScript
解释here.:)