如何将 QML MediaPLayer 与 C++ 端集成
How can I integrate QML MediaPLayer with C++ side
我使用 MediaPlayer 元素开发了一个基于 QML 的视频播放器程序。该程序具有视频播放器的大部分基本功能(播放、暂停、音量 up/down、前进、后退等)。我的下一个任务是为视频添加字幕,我需要使用 MediaPlayer 元素的 metaObject 方法,但 QML 端确实允许该功能,它说:
Note: This property is not accessible from QML.
文档中有一个metaObject相关的描述让我很困惑:
mediaObject : variant
This property holds the native media object.
It can be used to get a pointer to a QMediaPlayer object in order to integrate with C++ code.
QObject *qmlMediaPlayer; // The QML MediaPlayer object
QMediaPlayer *player = qvariant_cast<QMediaPlayer *>(qmlMediaPlayer->property("mediaObject"));
这是什么意思?如何将 QML MediaPlayer 与 C++ 集成?任何帮助都会很棒,谢谢。
这将取决于您启动 QML 应用程序的具体方式。假设是这样设置的:
int main(int argc, char **argv)
{
// Q(Gui)Application setup...
QQmlApplicationEngine engine;
engine.load(QUrl("qrc:/main.qml"));
// ...
}
在 QML 对象层次结构中的某处,您有一个 MediaPlayer:
MediaPlayer {
objectName: "player"
// ...
}
重要的是设置objectName
属性,这样您就可以在C++代码中通过这个名称查找MediaPlayer实例。如上所述加载 QML 文档后,引擎有一个根对象,您可以使用 findChild
或 findChildren
(改编自 this answer)进行搜索:
auto qmlPlayer = engine.rootObjects()[0]->findChild<QObject*>("player");
auto player = qvariant_cast<QMediaPlayer*>(qmlPlayer->property("mediaObject"));
// use the QMediaPlayer*
我使用 MediaPlayer 元素开发了一个基于 QML 的视频播放器程序。该程序具有视频播放器的大部分基本功能(播放、暂停、音量 up/down、前进、后退等)。我的下一个任务是为视频添加字幕,我需要使用 MediaPlayer 元素的 metaObject 方法,但 QML 端确实允许该功能,它说:
Note: This property is not accessible from QML.
文档中有一个metaObject相关的描述让我很困惑:
mediaObject : variant
This property holds the native media object.
It can be used to get a pointer to a QMediaPlayer object in order to integrate with C++ code.
QObject *qmlMediaPlayer; // The QML MediaPlayer object
QMediaPlayer *player = qvariant_cast<QMediaPlayer *>(qmlMediaPlayer->property("mediaObject"));
这是什么意思?如何将 QML MediaPlayer 与 C++ 集成?任何帮助都会很棒,谢谢。
这将取决于您启动 QML 应用程序的具体方式。假设是这样设置的:
int main(int argc, char **argv)
{
// Q(Gui)Application setup...
QQmlApplicationEngine engine;
engine.load(QUrl("qrc:/main.qml"));
// ...
}
在 QML 对象层次结构中的某处,您有一个 MediaPlayer:
MediaPlayer {
objectName: "player"
// ...
}
重要的是设置objectName
属性,这样您就可以在C++代码中通过这个名称查找MediaPlayer实例。如上所述加载 QML 文档后,引擎有一个根对象,您可以使用 findChild
或 findChildren
(改编自 this answer)进行搜索:
auto qmlPlayer = engine.rootObjects()[0]->findChild<QObject*>("player");
auto player = qvariant_cast<QMediaPlayer*>(qmlPlayer->property("mediaObject"));
// use the QMediaPlayer*