crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QVideoWidget полноэкранный режим.
nicktrandafil
  опции профиля:
сообщение 23.10.2013, 23:09
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 27.9.2013
Пользователь №: 3938

Спасибо сказали: 0 раз(а)




Репутация:   0  


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. На виндовсе работает нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.1.2021, 13:59