相关疑难解决方法(0)

捕获QML绘图缓冲区,不显示

我需要抓住每个QML(QtQuick 2)绘图框并通过网络发送它.目前我已经使用了下面列出的方法,但这种方法有两大缺点

1)由于Qt5文档,grabWindow()函数存在性能问题

2)它无法与隐藏的QML窗口一起使用

在QQuickWindow :: afterRendering之后可以立即获得OpenGL渲染缓冲区吗?使用FBO?共享opengl上下文?

class Grab: public QObject
{
 public:
 Grab( QQuickWindow * wnd ) : wnd_(wnd) {}

 public slots:

    void Grabme()
    {
       QImage image = wnd_->grabWindow();
    }

private:

QQuickWindow *wnd_;
};

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);


QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/grab1/main.qml"));
viewer.showExpanded();

Grab grab( &viewer );
QObject::connect( &viewer, &QtQuick2ApplicationViewer::frameSwapped,
                  &grab, &Grab::Grabme, Qt::DirectConnection );


return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

opengl qt screen-capture qml qt5

7
推荐指数
1
解决办法
5226
查看次数

标签 统计

opengl ×1

qml ×1

qt ×1

qt5 ×1

screen-capture ×1