VideoView::VideoView(QWidget *parent) : QAbstractItemView(parent), _view(new VideoGraphicsView), _noVideoVideo(Video(new QGraphicsScene(_view), 0)), _playBar(new PlayBar(this)), _status(new VideoStatus(this)) { new QVBoxLayout(viewport()); viewport()->layout()->addWidget(_status); _status->hide(); viewport()->layout()->addWidget(_view); viewport()->layout()->setMargin(0); viewport()->layout()->setSpacing(0); _view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); _view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); _view->setRenderHint(QPainter::Antialiasing); viewport()->layout()->addWidget(_playBar); QImage bgImage(":/images/translucent-logo.png"); _view->setScene(_noVideoVideo.scene); _noVideoVideo.bgRect = new QGraphicsRectItem(0); _noVideoVideo.bgRect->setRect(QRectF(QPointF(0, 0), bgImage.size())); _noVideoVideo.bgRect->setBrush(bgImage); _noVideoVideo.bgRect->setPen(Qt::NoPen); _noVideoVideo.scene->addItem(_noVideoVideo.bgRect); _noVideoVideo.scene->setSceneRect(QRectF(QPointF(0, 0), bgImage.size())); QGraphicsItem *noVideoText = _noVideoVideo.scene->addText(tr("No video")); noVideoText->moveBy(100, 50); connect(_playBar, SIGNAL(newDistanceRequested()), SLOT(beginDistanceCreation())); connect(_playBar, SIGNAL(newAngleRequested()), SLOT(beginAngleCreation())); connect(_playBar, &PlayBar::frameChanged, [=](int frame) { QModelIndex currentFrameIndex = model() ->index(_currentVideoRow, VideoModel::CurrentFrameColumn); if (frame == currentFrameIndex.data().toInt()) { return; } model()->setData(currentFrameIndex, frame); }); connect(_playBar, &PlayBar::newTrajectoryRequested, [=]() { auto status = new Status::Persistent(_status, tr("Click a point to track")); connect(_view, SIGNAL(mouseReleased(QPointF)), SLOT(calculateTrajectory(QPointF))); connect(_view, SIGNAL(mouseReleased(QPointF)), status, SLOT(deleteLater())); }); }