Русскоязычный портал о QML и QtQuick, QmlPortal What the duck
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум QML » QML форум » Вопросы по QML » HWND в QML
HWND в QML
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
 
Форум QML » QML форум » Вопросы по QML » HWND в QML
  • Страница 1 из 1
  • 1
Поиск: