2015-02-17 13 views
14

Sto usando il nuovo WebEngine per giocare e imparare. Ho cercato di trovare alcuni metodi simili trovati usando Qt WebKit: addToJavaScriptWindowObject()Come utilizzare Qt WebEngine e QWebChannel?

ho scoperto che l'uso di Qt WebEngine, devo usare la QWebChannel per registrare le funzioni per l'oggetto finestra di Javascript. Se questo è corretto, mi porta alla seguente domanda.

Ho installato Qt 5.4.0 sul mio computer. Ho notato che qwebchannel.js non è stato trovato nell'SDK installato sul mio computer. L'ho trovato sulla fonte Git.

Se si dispone di un'applicazione desktop nativa Qt con QWebEnginePage e QWebEngineView, cosa è necessario per poter registrare le funzioni sull'oggetto della finestra di Javascript?

La mia applicazione desktop si sposta automaticamente su una pagina http che ho creato. Così ho accesso ai contenuti connessi allo QWebEngineView.

Quali sono i passaggi da eseguire in modo che possa funzionare?

+0

Sei riuscito a trovare una soluzione? Sono bloccato nello stesso problema, voglio un qualche tipo di comunicazione dalla mia pagina web a C++ (via js o in altro modo se possibile) Per favore aiuto .. –

risposta

0

Qt ha documentazione su questo ora:

Qt WebChannel Standalone Example

si deve aggiungere un QWebSocketServer per la vostra applicazione cpp che la QWebEngineView s' HTML/Javascript si collegherà ad usare un WebSocket. Quindi utilizzare QWebChannel per la comunicazione bidirezionale.

11

In Qt5.6, se si desidera rendere la parte C++ e JavaScript per comunicare, l'unico modo per farlo è utilizzare QWebChannel su un QWebEngineView, come da lei indicato. Si fa in questo modo nel file .cpp:

m_pView = new QWebEngineView(this); 
QWebChannel * channel = new QWebChannel(page); 
m_pView->page()->setWebChannel(channel); 
channel->registerObject(QString("TheNameOfTheObjectUsed"), this); 

Qui, basta dire che si registra un oggetto denominato TheNameOfTheObjectUsed che sarà disponibile sul lato JS. Ora, questa è la parte di codice per utilizzare nel lato JS:

new QWebChannel(qt.webChannelTransport, function (channel) { 
      // now you retrieve your object 
      var JSobject = channel.objects.TheNameOfTheObjectUsed; 
     }); 

Ora, se si desidera recuperare alcune proprietà della classe nel lato JS, è necessario disporre di un metodo sul lato C++, che restituisce una stringa, un intero, un lungo ... questo è quello che sembra dalla parte del C++, in .h:

Q_INVOKABLE int getInt(); 
Q_PROPERTY(int myIntInCppSide READ getInt); 

E ora, si ottiene l'int come questo sul lato JS:

var myIntInJSside= JSobject.myIntInCppSide; 

Questo è una spiegazione molto semplice, e ti consiglio di guardare this video che mi è stato molto utile. Inoltre, è possibile leggere ulteriori informazioni su JavaScript API fornite da QWebChannel, nonché sulla documentazione relativa a QWebChannel.

Spero che questo aiuti!

+0

Dove hai trovato quella parte su 'qt.webChannelTransport'? Non sono riuscito a trovarlo da nessuna parte nella documentazione o nell'esempio ... – sschober

+1

@sschober Puoi trovarlo nel [QWebEnginePage doc] (http://doc.qt.io/qt-5/qwebenginepage.html): 'Il trasporto è esposto nel mondo JavaScript come qt.webChannelTransport, che dovrebbe essere usato quando si utilizza l'API JavaScript di Qt WebChannel. – IAmInPLS

Problemi correlati