Координаты для offset () или setOffset в классе «QGraphicsVideoItem» - PullRequest
0 голосов
/ 08 октября 2019

Я использую Qt Creator 4.5.2 (Qt 5.9.5, GCC 7.3.0 64-bit) и работаю в Ubuntu 18.04. Я просто пытаюсь получить потоковое видео с IP-камеры или воспроизвести предварительно записанное видео,Я использовал методы «QGraphicsView», «QGraphicsScene» и «QGraphicsVideoItem».

Координата верхнего левого корнета для «вида» - это (300, 200) в «CentralWidget». Видео воспроизводилось, но его смещение отключено на (-300, -200). Мне пришлось использовать метод 'setOffset (300, 200)' из QGraphicsVideoItem, чтобы получить видео в правильном положении.

На какой координате основано смещение? Я ожидал, что это была собственная координата предмета. Но, видимо, это не так. Для моего теста он основан на координате «центрального виджета». Я что-то не так понимаю?

Вот документ из QT для 'offset': QGraphicsVideoItem будет рисовать видео, используя смещение для своего верхнего левого угла.

Вот мой код. Я только копирую и вставляю сюда связанную часть.

   mpView = ui->gvCam; // Top left corner offset is: (300, 200)
   mpScene = new QGraphicsScene;
//   mpScene = new QGraphicsScene(mpView);
   mpView->setScene(mpScene);
   mpScene->setSceneRect(mpView->x(), mpView->y(), mpView->width(), mpView->height());

   mpVideoItem = new QGraphicsVideoItem;
   mpPlayer = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);

   mpPlayer->setMedia(QUrl::fromLocalFile("/home/test1/Videos/tmp1.avi"));
   mpPlayer->setVideoOutput(mpVideoItem);

   mpScene->addItem(mpVideoItem);
   QSizeF qsf1(mpView->width(), mpView->height());
   mpVideoItem->setSize(qsf1);
   mpVideoItem->setAspectRatioMode(Qt::IgnoreAspectRatio);

   // I have to set the following offset to get the video at the correct location. WHY?
   QPointF qpf1(mpView->x(), mpView->y());
   mpVideoItem->setOffset(qpf1);

   mpPlayer->play();

Спасибо,

Стивен

...