Qt:必须调用对非静态成员函数的引用

时间:2014-10-28 13:04:54

标签: c++ multithreading qt

我是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

1 个答案:

答案 0 :(得分:1)

您应该像这样致电QtConcurrent::run

QFuture<QPixmap> future = QtConcurrent::run(slider, 
                                            &Sliders::modifySaturation,  
                                            value, image);

但我认为你无论如何都错了。您假定在主线程中执行的on_slideSaturation_valueChanged广告位将被阻止,直到future.waitForFinished()返回。