QVideoWidget становлению в QMainWindow, а именно в ui->centralWidget. Я открываю видео файл, запускаю проигрывание все нормально работает, я наблюдаю видео на форме. Потом я нажимаю кнопку fullscreen, которая вызывает m_videoWgt->setfullScreen(true) видео разворачивается на весь экран и тоже все нормально. Но когда я выхожу из режима полного экрана, то форма моя ничего не показывает. Вот пример:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QFileDialog>
#include <QKeyEvent>
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_player(new QMediaPlayer(this))
{
m_videoWgt = new VideoWidget;
/*m_videoWgt->resize(200, 200);
m_videoWgt->show();
*/
ui->setupUi(this);
m_player->setVideoOutput(m_videoWgt);
/*m_videoWgt->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
m_videoWgt->setAttribute(Qt::WA_OpaquePaintEvent);
*/
QVBoxLayout * lt = new QVBoxLayout;
lt->addWidget(m_videoWgt);
ui->centralWidget->setLayout(lt);
connect(m_videoWgt, SIGNAL(fullScreenChanged(bool)), ui->centralWidget, SLOT(repaint()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionFull_Screen_triggered()
{
m_videoWgt->setFullScreen(!m_videoWgt->isFullScreen());
}
void MainWindow::on_actionOpen_triggered()
{
QString path = QFileDialog::getOpenFileName();
if (path.isEmpty())
return;
m_player->setMedia(QMediaContent(QUrl::fromLocalFile(path)));
}
void MainWindow::on_actionPlay_triggered()
{
m_player->play();
}
void MainWindow::on_actionStop_triggered()
{
m_player->stop();
}
VideoWidget::VideoWidget(QWidget *parent)
{
}
void VideoWidget::keyPressEvent(QKeyEvent *event)
{
setFullScreen(false);
}
Вот *.h файл:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QMediaPlayer;
#include <QVideoWidget>
class VideoWidget : public QVideoWidget
{
Q_OBJECT
public:
explicit VideoWidget(QWidget * parent = 0);
protected:
void keyPressEvent(QKeyEvent *event);
};
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionFull_Screen_triggered();
void on_actionOpen_triggered();
void on_actionPlay_triggered();
void on_actionStop_triggered();
private:
Ui::MainWindow *ui;
QMediaPlayer * m_player;
VideoWidget * m_videoWgt;
};
#endif // MAINWINDOW_H
Не подскажете, в чем проблема? Пробовал по другому: QVideoWidget не устанавливаю в mainwindow, а оставляю его свободным, в виде отдельного виджета без родителя. Тогда все работает хорошо после выхода из полноэкранного режима. Отсюда вывод, что, может быть, нам нужно зацепиться за сигнал QVideoWidget fullScreenChanged(bool) и что-то сделать в mainwindow'e. Есть какие идеи?
P.S. Проблема эта возникает в Ubuntu. На виндовсе работает нормально.