求助!Qt多窗口显示QOpenGLWidget异常问题

DiligenceProgrammer 2020-07-11 02:57:08
情景还原
IDE:Qt Creator,OpenGL:4.5,Qt:5.9.8
我可以在一个窗口中正常显示多个QOpenGLWidget控件(已经创建子类),例如:

m_pVBLayout = new QVBoxLayout(this);
for(int i=0; i<10; i++){
m_pVBLayout->addWidget(new QOpenGLWidget(this));
}

并且可以通过按钮点击槽动态添加QOpenGLWidget控件。但是在按钮点击槽中打开一个新的窗口,新窗口中的所有QOpenGLWidget控件都不能正常显示,类似一个空窗口。
在关闭这个新窗口时程序会报错,程序停在glDrawElements方法:

分析可能出现的问题
查看QOpenGLWidget帮助文档,有这么一段:

根据这段文档,分析可能的原因是在一个窗口中创建新的窗口,两个窗口拥有各自的上下文,并且上下文存在冲突。尝试通过全局共享上下文解决,在程序开始部分添加如下代码:

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);

QApplication a(argc, argv);

程序启动后,第一个窗口中QOpenGLWidget控件可以正常显示,第二个窗口中的QOpenGLWidget控件依旧不显示。但关闭第二个窗口时,没有提示错误,程序正常运行。
有没有朋友帮忙看一下,非常感谢!
...全文
1627 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
发现一个解决方法,当子窗口为模态窗口时,并且限制子窗口的作用域,显示正常。
这个方法不适用new的子窗口

{
QDialog dialog(this);
dialog.exec();
}

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧