我是Qt的新手,今天我一直在尝试调整我的应用程序以使用QFuture
来同时从主线程中运行一些任务。
我有一个方法可以更改QImage
的饱和度值,该值会返回要绘制到QPixmap
的{{1}}个对象。这一切都很好,不使用线程,但显然它在主线程上非常密集,所以我想把它移开。
我在Qt中阅读了一些关于Threading的文章,并发现v5支持concurrent run functionality,这听起来非常适合我的用例,因为我认为我只能将我的函数发送到一个新的线程,就像在下面的片段:
QGraphicsView
但是我收到错误void MainWindow::on_slideSaturation_valueChanged(int value)
{
QFuture<QPixmap> future = QtConcurrent::run(slider->modifySaturation, value, image);
future.waitForFinished();
image = future.result();
renderImageToCanvas();
modified = true;
}
。
这个错误是从我的Sliders类中调用的,我知道我没有将该方法声明为静态,但是当我这样做会导致一大堆错误 - 是否有任何方法可以将此方法传递给我的并发调用而不是声明为静态?
Sliders.h
reference to non-static member function must be called
答案 0 :(得分:1)
您应该像这样致电QtConcurrent::run
:
QFuture<QPixmap> future = QtConcurrent::run(slider,
&Sliders::modifySaturation,
value, image);
但我认为你无论如何都错了。您假定在主线程中执行的on_slideSaturation_valueChanged
广告位将被阻止,直到future.waitForFinished()
返回。