【发布时间】:2017-03-05 11:17:42
【问题描述】:
我在QML中有两个javascript函数fun1,fun2,想要一个接一个(fun2)执行(fun1)完成,更准确地说,我如何启动fun2()之后ImageReader 中的 fun1 已完成。 ImageReader是通过继承QImageProvider用C++编写的函数,如下:
function fun1(){
ImageReader.magic(photo);
}
function fun2(){
myImg.source = "";
myImg.source = "image://ImageReader";
}
fun1();
fun2();
使用场景是我想用C++处理一张图片,处理完成后,通过QML Image项显示出来。
【问题讨论】:
-
那么你的问题是什么?你不是已经按照你提供的代码在
func1()之后执行func2()了吗? -
我建议一个接一个地打电话给他们。例如像代码here。是什么让你觉得他们不是一个接一个被处决?
-
我认为你的问题是,
fun1()只启动了在另一个线程中异步执行的方法ImageReader.magic(photo)。所以你的问题应该是:我如何在ImageReader完成他的魔法之后开始fun2()。 因为fun1()可能在此之前完成。所以fun2()在fun1()完成之后立即执行,但在ImageReader.magic(photo)完成之前执行。 -
或遵循
Loader和其他QML 组件的模式,并在ImageReader中包含属性status。这与属性statusChanged一起提供 -
据我所知
QQuickImageProvider不继承自QObject,因此使用信号将需要更改继承。但我同意@derM,这是做你想做的事的好方法。另一种方法是将指向“下一个”函数的指针传递给 C++ 对象(在您的情况下为 ImageReader)。请参阅this 问题的答案以了解更多信息。