[opengl] Cannot make QOpenGLContext current in a different thread

這個問題花了一些時間,在此記錄一下,希望能夠幫助大家

錯誤復現

線程裏面進行gl畫圖—>使用renderPixmap()截圖保存時。軟件閃退。
報錯:
Cannot make QOpenGLContext current in a different thread
QObject: Timers cannot be stopped from another thread
在這裏插入圖片描述

原因

測試了一下發現->show()函數也存在中斷。原因如下:

  1. QOpenGLContext 類要求只能再一個線程中使用。即初始化使用需要在一個線程裏面。
  2. myThread在構造函數中初始化,而在run函數中使用。
  3. 在主線程new(初始化),run函數中使用。
  4. 不在一個線程,即報錯。
    不能

修改位置

修改思路:將gl初始化放入run裏面/gl作爲局部變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章