这个问题花了一些时间,在此记录一下,希望能够帮助大家
错误复现
线程里面进行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作为局部变量