1

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

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

对于部署,我们在 Jetson Xavier 上运行应用程序,这是一台 ARM 机器。它运行 Ubuntu 18.04,安装了 QT 版本 5.9.5(也是操作系统的默认版本)。当我在那里运行应用程序时,除了一个 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);

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

我无法弄清楚为什么这些功能可能会影响 Jetson 上显示的 QGraphicsView。我确实发现应用程序顶部的 QMenu 起初在 Jetson 上不起作用,直到我禁用了“NativeMenuBar”属性(大概是强制 QT 事物而不是原生)。我通过 QGraphicsView 和鼠标查看了类似的东西并出现了空白。

4

1 回答 1

1

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

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

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

于 2021-12-09T01:09:11.737 回答