| Romko | Дата: Четверг, 23.02.2012, 07:34 | Сообщение # 1 |
 Постоялец
Группа: Проверенные
Сообщений: 22
Награды: 0
Репутация: 2
Статус: Offline
| Здравствуйте, помогите пожалуйста решить проблему.
Проблема: мне нужно использовать 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); видео проигрывается корректно, но в отдельном окне. То есть скорее всего проблема в этой строчке.
Подскажите пожалуйста как устранить проблему? Заранее спасибо.
Сообщение отредактировал Romko - Пятница, 24.02.2012, 00:24 |
| |
|
|