Здравствуйте, помогите пожалуйста решить проблему.
Проблема: мне нужно использовать qWidget вместо Phonon. Но чтоб видео корректно работало.
У нас был рабочий код, в котором мы использовали Phonon. Все работало корректно. Видео открывалось в одном окне, и корректно отображалось.
Вот пример рабочего кода:
Code
class QmlVideo : public QDeclarativeItem
{
Q_OBJECT
public:
explicit QmlVideo(QDeclarativeItem *parent = 0);
public slots:
void play();
private:
Phonon::VideoPlayer *m_pPhononPlayer;
};
QmlVideo::QmlVideo(QDeclarativeItem *parent) :
QDeclarativeItem(parent)
{
m_pPhononPlayer = new Phonon::VideoPlayer(Phonon::VideoCategory);
QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(m_pPhononPlayer);
}
void QmlVideo::play()
{
m_pPhononPlayer->play(QUrl("C:\\test.avi"));
}
Но нам нужно заменить Phonon на qWidget, и только мы меняем:
proxy->setWidget(m_pPhononPlayer);
на
proxy->setWidget(m_pWidget);
Почему-то перестает отображать видео. Звук идет, но картинки нету.
Вот код, который не работает:
Code
class QmlVideo : public QDeclarativeItem
{
Q_OBJECT
public:
explicit QmlVideo(QDeclarativeItem *parent = 0);
public slots:
void play();
private:
QWidget *m_pWidget;
IPlayerCore *m_pPlayerCore;
};
QmlVideo::QmlVideo(QDeclarativeItem *parent) :
QDeclarativeItem(parent)
{
m_pWidget = new QWidget();
m_pWidget->resize(300, 300);
m_pWidget->show();
QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(m_pWidget);
}
void QmlVideo::play()
{
WId hwnd = m_pWidget->winId();
if (CreatePlayerCore(hwnd, &m_pPlayerCore) != IPlayerCore::STATUS_OK || m_pPlayerCore == 0) {
qDebug() << "Failed to create player core!\n";
}
if (m_pPlayerCore->Subscribe(new IPlayerCoreNotifyImpl(hwnd, m_pPlayerCore)) < 0) {
qDebug() << "Failed to subscribe to core events!\n";
}
if (m_pPlayerCore->Load(false, L"C:\\test.avi") != IPlayerCore::STATUS_OK) {
qDebug() << Q_FUNC_INFO << "error";
}
}
Если закомментировать одну строчку:
Code
proxy->setWidget(m_pWidget);
видео проигрывается корректно, но в отдельном окне. То есть скорее всего проблема в этой строчке.
Подскажите пожалуйста как устранить проблему?
Заранее спасибо.