目标是使用GUI实现视频播放器。 GUI是QML的驱动程序,解码的视频帧来自外部(非C ++)库。
我已经运行了QML脚本(QQmlApplicationEngine)。 QQmlApplicationEngine :: rootObjects返回一个对象列表,第一个被转换为QQuickWindow,一个插槽连接到QQuickWindow :: beforeRendering()信号。它按预期工作。
我可以从视频解码器库返回的原始像素缓冲区创建一个QImage。不知怎的,我想在QQuickWindow :: beforeRendering()信号处理程序中看到QImage。如果我的假设是正确的,那么QML内容将在之后绘制,这样我就可以获得带有GUI的视频播放器。
我的问题:
(我是Qt的初学者)
由于
答案 0 :(得分:0)
看来我走错了路。对我有用的正确方法是创建一个新的QML项目,然后将其放在QML文件中。新QML项目的类是负责绘制项目本身的,这是解码视频帧进入图片的位置。由于自定义QML项目的渲染器适用于FBO,我可以使用类似的东西来绘制:
QOpenGLPaintDevice device(renderSize);
QPainter painter(&device);
painter.fillRect(0, 0, 100, 200), QColor(0, 255, 0));
painter.end();
update();
从内存中显示任何类型的位图都不会有问题。
这是示例代码的链接,这是解决方案的关键:
http://doc.qt.digia.com/qt-5.1/qtquick/scenegraph-textureinsgnode.html
还有一些有趣的链接: