我是Qt中的新手,今天我一直在尝试使我的应用程序适应QFuture
,以便在主线程中同时运行一些任务。Qt:必须调用对非静态成员函数的引用
我有一种方法,它可以改变QImage
的饱和度值,该值返回一个QPixmap
对象以便绘制到我的QGraphicsView
。这一切都运行良好,没有使用线程,但显然它在主线程上非常密集,所以我想把它移走。
我看了Qt的有关线程几篇文章,发现V5支持concurrent run functionality,这听起来非常适合我的使用情况下,我想我只能够派遣我的功能集成到一个新的线程,如下面的代码片段:
void MainWindow::on_slideSaturation_valueChanged(int value)
{
QFuture<QPixmap> future = QtConcurrent::run(slider->modifySaturation, value, image);
future.waitForFinished();
image = future.result();
renderImageToCanvas();
modified = true;
}
但是,我收到错误reference to non-static member function must be called
。 这个错误是从我的Sliders类中调用的,我知道我没有将该方法声明为静态方法,但是当我这样做时会导致整个堆错误 - 是否有任何方法可以将此方法传递给没有它的并发调用被宣布为静态?
Sliders.h
class Sliders
{
public:
Sliders();
enum Member { RED, GREEN, BLUE, BRIGHTNESS, CONTRAST, HUE, SATURATION, LIGHTNESS };
QPixmap modifySaturation(int, QPixmap);
void setMember(enum Member, int);
int getMember(enum Member);
private:
int m_redValue;
int m_greenValue;
int m_blueValue;
int m_brightnessValue;
int m_contrastValue;
int m_hueValue;
int m_saturationValue;
int m_lightnessValue;
};
在主线程中使用'QPixmap'不安全。改为使用'QImage'。 – thuga 2014-10-28 14:22:42
你能否提出一个更好的方式来构建我的应用程序? – Alex 2014-10-28 14:27:47