Лучший способ отображения производительности в Qt - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно отображаемое изображение с двумя требованиями, оно должно быть очень быстрым (возможно, 60-120 кадров в секунду) и с низкой производительностью ЦП для отображения и рисования примитивов и прокрутки. Я нахожу несколько вариантов, но я не уверен, что ведьма будет лучшей. Я буду избегать копирования изображения. Просто дата подачи будет записывать прямо в изображение

  1. Написать свой QOpenGlWidget. Плюсы: нет копии изображения, OpenGL Backend. Минусы: много работ, никаких свитков не реализовано
  2. Используйте QGraphicsView в качестве стандарта. Плюсы: возможен также opengl backend. Минусы: исправьте меня, если я пропустил, но изображение копируется стандартным способом.
  3. QGraphicsView с переопределенной функцией drawBackground. Плюсы: нет копии изображения, OpenGL Backend. Минусы: я не знаю.

Не могли бы вы показать мне решения, которые я пропустил, и помочь выбрать лучший?

1 Ответ

0 голосов
/ 03 ноября 2019

Я думаю, что использование QGraphicsItem и переопределение QGraphicsItem :: paint , вызывающего QPainter :: drawImage , будет делать то, что вы хотите, без хлопот с OpenGLвещи между QPainter :: beginNativePainting () и QPainter :: endNativePainting () . Использование первого пути (нативное размещение) также является другим вариантом, если вызов QPainter :: drawImage не даст желаемого результата.

void FastImageItem::paint(QPainter *painter,
                          const QStyleOptionGraphicsItem *option,
                          QWidget *widget)
{
    painter->drawImage(image.rect, image, image.rect);
}

Очевидно, вам следует реализовать QGraphicsItem :: boundingRect () , чтобы вернуть размер изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...