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