Перекрестие в неправильном месте на экране видео после вызова «fitInView» - PullRequest
0 голосов
/ 27 сентября 2019

Этот вопрос относится к этому: Размер видео не заполняет окно QGraphicsView

Я пытался использовать «scene-> addLine (...)», чтобы добавить «красный»линия на экран.Но это было далеко после вызова 'fitInView'.В начале, перекрестие было в правильном месте, в середине экрана.Но, когда видео началось (после лямбда-вызова 'fitInView'), оно полностью исчезло с экрана.Я думаю, проблема в том, что размер сцены и ее местоположение неверны.Как я могу сделать размер и начальную (x, y) для «сцены», чтобы соответствовать «представлению», чтобы перекрестие было нарисовано в правильном месте.

Вот новый код:

#include <QApplication>
#include <QMainWindow>
#include <QMediaPlayer>
#include <QGraphicsView>
#include <QGraphicsVideoItem>
#include <QGraphicsScene>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QGraphicsView* view = new QGraphicsView;
    QGraphicsScene* scene = new QGraphicsScene(view);

    view->setScene(scene);
    QMediaPlayer * player = new QMediaPlayer;
    QGraphicsVideoItem *item = new QGraphicsVideoItem;
    player->setVideoOutput(item);
    player->setMedia(QUrl::fromLocalFile("/path/to/tmp1.mp4"));
    // player->setMedia(QUrl("rtsp://10/0/8/100:8554/0"); // Live IP camera
    scene->addItem(item);
w.resize(640, 480);

    QObject::connect(scene, &QGraphicsScene::sceneRectChanged, [=](const QRectF &) { view->fitInView(item); });
    player->play();
    w.setCentralWidget(view);
    w.show();    

   // Draw a crosshair
   QPen p(Qt::red);
   qreal centerX, centerY;
   centerX = view->width() / 2;
   centerY = view->height() / 2;
   qreal halfLen = centerX / 2;
   (void)scene->addLine(halfLen, centerY, centerX + halfLen, centerY, p);
   (void)scene->addLine(centerX, centerY - 30, centerX, centerY + 30, p);

    return a.exec();
}
...