crossplatform.ru

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


  Ответ в QVideoWidget полноэкранный режим.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
nicktrandafil Дата 23.10.2013, 23:09
  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. На виндовсе работает нормально.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 14:58