Ho bisogno di afferrare ogni disegno QML (QtQuick 2) e inviato sulla rete. Al momento ho usato il metodo elencato di seguito, ma questo metodo ha due grande svantaggioCattura il buffer di disegno QML, senza visualizzare
1) A causa di funzione QT5 documentazione grabWindow() ha problemi di prestazioni
2) Non può funzionare con finestra nascosta QML
E 'possibile ottenere il buffer di rendering OpenGL subito dopo QQuickWindow :: afterRendering? Utilizzo degli FBO? Contesto opengl condiviso?
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();
}
questo codice mi dà errore: errore C2027: uso di tipo non definito 'QOpenGLFramebufferObject' 1> C: \ Qt \ Qt5.1.0 \ 5.1.0 \ msvc2010 \ include \ QtQuick/qquickwindow.h (57): vedere la dichiarazione di 'QOpenGLFramebufferObject' 1> grab_window.cpp (16): errore C2232: '-> QScopedPointer :: isNull': l'operando sinistro ha 'classe', usa '. –
otto
Dovresti controllare se la tua versione Qt è stata compilata con il supporto OpenGL, se lo scarichi dal sito ufficiale, che dovrebbe essere. Inoltre, per quanto riguarda msvc2010 è necessario creare un file di progetto corretto con la libreria inclusa. Sto usando entrambi i file di progetto cmake e .pro e tutto funziona su Qt 5.0.2 – Dmitry
sì, questo è il motivo, sto sviluppando su Windows 7 da Visual Studio 2010, ho usato la macro QT_NO_OPENGL, altrimenti non è possibile trovare le intestazioni GLES2 . – otto