Проблема с QT QGraphicsView на Jetson Xavier

#c #qt #qgraphicsview #jetson-xavier

Вопрос:

У меня странная проблема, и я не совсем уверен, с чего начать выяснять проблему или даже что для этого искать. Надеюсь, кто-нибудь видел это раньше и сможет помочь!

Я создал приложение QT в QtCreator/C . Я разработал приложение на компьютере Ubuntu 20.04 с версией QT 5.12.8 (по умолчанию от apt). Приложение запускается и ведет себя так, как ожидалось на моей машине разработки.

Для развертывания мы запускаем приложение на Jetson Xavier, который является машиной ARM. Он работает под управлением Ubuntu 18.04, в котором установлена версия QT 5.9.5 (также по умолчанию для ОС). Когда я запускаю приложение там, все работает нормально, за исключением одного QGraphicsView, который показывает пустой белый экран вместо предполагаемого дисплея.

GraphicsView A работает, он показывает QPixmap на графической сцене. GraphicsView B отображает только белый цвет, предполагается, что он отображает серию точек и линий на черном фоне (отображается в векторной форме в виде QObjects). Опять же, это отлично работает на моей машине.

Разница между этими двумя QGraphicsViews заключается в том, что в том, который не работает, включен ряд функций ввода событий мышью, чтобы вы могли перемещать и масштабировать QGraphicsScene. Я обнаружил, что если я закомментирую следующие три строки в своей настройке QGraphicsView B, то снова смогу увидеть точки и линии:

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

Фильтр событий обрабатывает события колеса прокрутки для масштабирования. Похоже, что любая из этих трех строк отключает представление, я пробовал несколько комбинаций, некоторые из которых были прокомментированы или нет. Очевидно, что когда я удаляю их, я больше не могу перемещать/масштабировать QGrapicsScene, что мне нужно уметь делать.

Я не могу понять, почему эти функции могут влиять на QGraphicsView, отображаемый на Jetson. Я обнаружил, что QMenu в верхней части приложения сначала не работал с Jetson, пока я не отключил атрибут «NativeMenuBar» (предположительно, заставляя QT вместо собственного). Я просмотрел QGraphicsView и мышь для чего-то подобного и ничего не нашел.

Ответ №1:

Это не строгий ответ, но в конце концов я нашел обходной путь, который смягчает эту проблему.

После еще немного исследований я обнаружил, что проблема конкретно связана с фильтром событий, и « installEventFilter . Я все еще не уверен, в чем проблема.

Обходной путь, который я нашел, состоял в том, что вместо использования фильтра событий я классифицировал QGraphicsView события мыши и обрабатывал их с помощью настраиваемых версий QGraphicsView::mouseReleaseEvent etc.