Jetson Xavier 上的 QT QGraphicsView 问题

Problem with QT QGraphicsView on Jetson Xavier

我遇到了一个奇怪的问题,我不确定从哪里开始解决这个问题,甚至不知道要搜索什么。希望有人以前看过并能提供帮助!

我已经在 QTCreator/C++ 中创建了一个 QT 应用程序。我在 Ubuntu 20.04 机器上开发了该应用程序,该机器具有 QT 版本 5.12.8(apt 的默认版本)。应用程序 运行 在我的开发机器上的表现符合预期。

为了部署,我们在 Jetson Xavier(一种 ARM 机器)上 运行 应用程序。 运行ning Ubuntu 18.04 安装了 QT 5.9.5 版本(也是 OS 的默认版本)。当我 运行 那里的应用程序时,除了一个 QGraphicsView 之外,一切正常,它显示空白屏幕而不是预期的显示。

GraphicsView A 作品,它在图形场景上显示 QPixMap。 GraphicsView B 只显示白色,它应该在黑色背景上显示一系列点和线(以矢量形式显示为 QObjects)。同样,这在我的机器上运行良好。

这两个 QGraphicsView 的区别在于,不起作用的那个启用了一些鼠标输入事件功能,因此您可以平移和缩放 QGraphicsScene。我发现如果我在 QGraphicsView B 设置中注释掉以下三行,那么我可以再次看到点和线:

    m_graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
    m_graphicsView->viewport()->installEventFilter(this);
    m_graphicsView->setMouseTracking(true);

事件过滤器处理用于缩放的滚轮事件。似乎这三行中的任何一行都禁用了视图,我尝试了一些注释掉或未注释掉的几种组合。显然,当我删除这些时,我无法再 pan/zoom QGrapicsScene,而我需要这样做。

我不明白为什么这些函数会影响 Jetson 上显示的 QGraphicsView。我确实发现应用程序顶部的 QMenu 一开始在 Jetson 上不起作用,直到我禁用了 'NativeMenuBar' 属性(大概是强制使用 QT 而不是本机)。我通过 QGraphicsView 和鼠标查看了类似这样的东西,结果一片空白。

这不是一个严格的答案,但我最终找到了缓解此问题的解决方法。

经过更多调查后,我发现问题与事件过滤器和“installEventFilter”特别相关。我不确定问题出在哪里。

我发现的解决方法不是使用事件过滤器,而是将 QGraphicsView 分类并使用自定义版本的 QGraphicsView::mouseReleaseEvent 等处理鼠标事件