首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插件中的QML和QtGStreamer

插件中的QML和QtGStreamer
EN

Stack Overflow用户
提问于 2012-08-07 11:42:13
回答 1查看 1.7K关注 0票数 1

我正在准备在嵌入式设备上播放视频的QML插件,其他开发人员可以不费吹灰之力地使用它。但是,目前提出的方法几乎总是需要围绕QML应用程序编写一些C++包装器。我指的是这个例子:8cpp-example.html

我希望能有一个插件,并简单地写:

代码语言:javascript
复制
import AwesomeVideoPlugin 1.0

Rect
{
    AwesomeVideo
    {
        width: 320 
        height: 240
        url: "./myvideo.avi" 
        // ... some minor stuff like mouse click handling, controls, etc.
    }
}

目前,QtGStreamer需要向VideoItem提供videoSurface属性。唯一的方法是在rootContext()中为附加属性创建和设置上下文。要创建GraphicsVideoSurface,我需要QGraphicsView (QDeclarativeView填充这个角色)。

是否可以:

  1. 从QDeclarativeView内部获取QDeclarativeItem (我只能从QML插件访问该插件),以后可以用它来喂养GraphicsVideoSurface吗?我的猜测是没有--不过,我已经找到了路径:==> QGraphScene ==> QGraphScene::views() ==> QList of QGraphicsView --看起来编程很糟糕,但是也许有人让它工作了(我遇到了分段错误)
  2. 是否有其他方法从QtGStreamer内部为QDeclarativeItem提供视频接收器?

格列茨

亚特萨

EN

回答 1

Stack Overflow用户

发布于 2012-08-08 15:25:30

我也有同样的问题,但还没有想出一个优雅的解决方案。

但是,一个想法是通过子类QApplication对象的访问器函数使视频界面可用。

当然,这意味着插件依赖于具有getVideoSurface方法的应用程序子类,但是它确实从QML代码中删除了丑陋。

代码语言:javascript
复制
class MyApp : public QApplication
{
    ....
     QGst::Ui::GraphicsVideoSurface *getVideoSurface() { return m_videosurface; }
}

 ...
int MyApp::init()
{
     m_viewer = new QDeclarativeView(); 
     m_viewer->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
     m_videosurface = new QGst::Ui::GraphicsVideoSurface(m_viewer);
}

MyVideoPlugin::MyVideoPlugin(QDeclarativeItem *parent) : QDeclarativeItem(parent)
{
    QGst::Ui::GraphicsVideoSurface *surface = ((MyApp*)qApp)->getVideoSurface();
}
...

现在,可以使用MyVideoPlugin元素而不引用导出的视频界面上下文项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11845199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档