這個問題花了一些時間,在此記錄一下,希望能夠幫助大家
錯誤復現
線程裏面進行gl畫圖—>使用renderPixmap()截圖保存時。軟件閃退。
報錯:
Cannot make QOpenGLContext current in a different thread
QObject: Timers cannot be stopped from another thread
原因
測試了一下發現->show()函數也存在中斷。原因如下:
- QOpenGLContext 類要求只能再一個線程中使用。即初始化和使用需要在一個線程裏面。
- myThread在構造函數中初始化,而在run函數中使用。
- 在主線程new(初始化),run函數中使用。
- 不在一個線程,即報錯。
修改位置
修改思路:將gl初始化放入run裏面/gl作爲局部變量