Jetson Xavier上QT QGraphicsView开启鼠标交互后显示白屏问题
可行修复方案
- 方案1:全局强制使用软件光栅渲染,避开Jetson NVIDIA驱动与Qt 5.9.5的OpenGL渲染兼容问题
在main函数初始化QApplication前添加代码:
该方案兼容性最高,缺点是大场景下渲染性能会有所下降。QApplication::setAttribute(Qt::AA_UseSoftwareRasterizer); - 方案2:单独为异常的GraphicsView B设置全视口更新模式,修复Qt 5.9输入事件触发时的局部更新计算错误
在初始化GraphicsView B的代码中添加:
该方案不影响全局渲染性能,90%以上同场景兼容性问题均可通过该配置修复。m_graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - 方案3:替换事件过滤器实现逻辑,避免视口事件被异常拦截
不要通过installEventFilter绑定滚轮事件,改为继承QGraphicsView类,重写wheelEvent、mouseMoveEvent等原生虚函数实现平移、缩放逻辑,避免事件过滤器拦截Qt内部的渲染更新通知事件。 - 方案4:显式设置场景边界矩形,避免开启拖拽模式后视口异常偏移
完成场景元素添加后,显式调用:
防止Qt 5.9自动计算场景范围出错,导致视口偏移到无内容区域显示白屏。m_graphicsView->setSceneRect(scene->itemsBoundingRect());
根因说明
该问题是Qt 5.9.5在ARM架构Jetson设备的Ubuntu 18.04桌面环境下的已知兼容bug:开启鼠标跟踪、拖拽模式或视口事件过滤器时,会触发Qt渲染更新逻辑与NVIDIA显卡驱动的适配异常,最终导致视口内容不渲染。和此前遇到的QMenu异常属于同类原生渲染适配问题,无需修改业务逻辑,仅需添加上述兼容配置即可解决。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

