Помогите пожалуйста со следующим вопросом, есть два виджета MainWindow и Test. Надо вывести видео формата h264 а поверх видео еще нарисовать нужную картинку. Видео постоянно идет и все работает
а вот с прорисовкой проблеммы
test.hC++ (Qt)
#ifndef TEST_H
#define TEST_H
#include <QWidget>
#include <QPainter>
#include <QPicture>
#include <QVideoWidget>
#include <QImage>
namespace Ui {
class Test;
}
struct Graphics {
QImage pixmapLogo;
};
class Test : public QVideoWidget
{
Q_OBJECT
Ui::Test *ui;
QPixmap mPixmap;
QImage pixmapL;
Graphics mGraphics;
protected:
void paintEvent(QPaintEvent *);
public:
Test(QWidget *parent = 0);
~Test();
};
#endif // TESTWIDGET_H
test.cppC++ (Qt)
#include "test.h"
#include "ui_test.h"
Test::Test(QWidget *parent) :
QVideoWidget(parent), ui(new Ui::Test)
{
ui->setupUi(this);
QPixmap p("://logo.png");
QLabel *label = new QLabel(parent);
label -> resize(150,34);
label -> setPixmap(p);
label -> move(610,14);
}
Test::~Test()
{
delete ui;
}
mainwindow.hC++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QDataStream>
#include "test.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Test *pTest;
QMediaPlayer *player;
#endif // MAINWINDOW_H
mainwindow.cppC++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
player = new QMediaPlayer(this);//, QMediaPlayer::StreamPlayback);
pTest = new Test(this);
pTest -> setGeometry(5,35,1385,1040);
pTest -> setOptWidget(mOptWidget);
pTest -> hide();
player -> setVideoOutput(pTest);
}
В этом случае картинка выводится поверх стрима плеера.
Если test.cpp написать следующим образом:
test.cppC++ (Qt)
#include "test.h"
#include "ui_test.h"
Test::Test(QWidget *parent) :
QVideoWidget(parent), ui(new Ui::Test)
{
ui->setupUi(this);
mGraphicsBlack.pixmapLogo.load(":/logo.png");
mGraphics = mGraphicsBlack;
pixmapL = mGraphics.pixmapLogo;
}
Test::~Test()
{
delete ui;
}
void Test::paintEvent(QPaintEvent *event)
{
QVideoWidget::paintEvent(event);
QPainter painter(this);
painter.drawImage(1010, 14, pixmapL);
painter.end();
}
То картинка не выводится поверх стрима. Как сделать чтобы именно с QPaint, картинка выводилось поверх стрима, и почему QPixmap выводит поверх а QPaint этого не делает?
Если в mainwindow.cpp мы уберем следующую строчку
C++ (Qt)
player -> setVideoOutput(pTest);
то картинка будет выводится, я понимаю, что данная функция накладывается поверх QImage при рисовке через QPaint, но QPixmap рисует ее, помогите с этим разобраться что упускаю?