2013-08-27 17 views
8

Nessuno dei tutorial disponibili online mostra come creare un'applicazione Qt HTML5. Idealmente, ho solo bisogno di un modo per inviare dati (una stringa lo farà) tra webkit e Qt.Come inviare dati da e verso il browser con un'applicazione Qt HTML5

Quando crea un'applicazione Qt HTML5 Esso genera

  1. myApp.pro
  2. html5applicationviewer.pri // commenti dicono Non toccare questo file
  3. html5applicationviewer.h // commenti dicono Non toccare questo file
  4. html5applicationviewer.cpp // commenti dire Non toccare questo file
  5. main.cpp
  6. index.html

Quindi, come si aggiunge una funzione in C++ per comunicare con il browser e come si aggiunge una funzione nel browser per comunicare con C++?

risposta

17

This example è vecchio ma funziona ancora ed è molto semplice e pulito.

Inoltre si consiglia di dare un'occhiata a qtwebkit-bridge e il tutorial.

modificare

aggiungere un file chiamato myclass.h

#include "html5applicationviewer/html5applicationviewer.h" 

class MyClass : public Html5ApplicationViewer 
{ 
    Q_OBJECT 
public: 
    explicit MyClass(QWidget *parent=0); 
private slots: 
    void addToJavaScript(); 
public slots: 
    QString test(const QString &param); 
}; 

aggiungere un file chiamato myclass.cpp

#include <QDebug> 
#include <QGraphicsWebView> 
#include <QWebFrame> 

#include "myclass.h" 

MyClass::MyClass(QWidget *parent) : Html5ApplicationViewer(parent) { 
    QObject::connect(webView()->page()->mainFrame(), 
      SIGNAL(javaScriptWindowObjectCleared()), SLOT(addToJavaScript())); 
} 

void MyClass::addToJavaScript() { 
    webView()->page()->mainFrame()->addToJavaScriptWindowObject("MyClass", this); 
} 

QString MyClass::test(const QString &param) { 
    qDebug() << "from javascript " << param; 
    return QString("from c++"); 
} 

nel vostro .pro aggiungere

SOURCES += main.cpp myclass.cpp 
HEADERS += myclass.h 

nel vostro .html aggiungere

try { 
    alert(MyClass.test("test string")); 
} catch(err) { 
    alert(err); 
} 

nel vostro main.cpp aggiungere includono:

#include "myclass.h" 

e il cambiamento:

Html5ApplicationViewer viewer; 

a:

MyClass viewer; 
+0

Non sono sicuro del motivo per cui questa risposta non è stata ancora accettata !! grazie, è stato di grande aiuto per me, non credo che addToJavaScriptWindowObject sia documentato per Html5ApplicationViewer come hai descritto. ottimo :) – mamod

+0

Sono finalmente tornato a questo progetto e le tue istruzioni hanno funzionato perfettamente. Primo tentativo! – user1873073

+0

risposta perfetta! –