如何使用Qt HTML5应用程序与浏览器之间发送数据

use*_*073 8 qt qtwebkit

在线提供的教程都没有显示如何创建Qt HTML5应用程序.理想情况下,我只需要一种方法来在webkit和Qt之间发送数据(字符串可以做).

当我创建一个Qt HTML5应用程序时它生成

  1. myApp.pro
  2. html5applicationviewer.pri //评论说不要碰这个文件
  3. html5applicationviewer.h //评论说不要碰这个文件
  4. html5applicationviewer.cpp //评论说不要碰这个文件
  5. main.cpp中
  6. 的index.html

那么如何在C++中添加一个与浏览器通信的函数呢?如何在浏览器中添加一个与C++通信的函数呢?

Ale*_*lex 17

这个例子很旧但仍然有用,非常简单和干净.

您也可以查看qtwebkit-bridge教程.

编辑

添加一个名为的文件 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);
};
Run Code Online (Sandbox Code Playgroud)

添加一个名为的文件 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++");
}
Run Code Online (Sandbox Code Playgroud)

在你的.pro添加

SOURCES += main.cpp myclass.cpp
HEADERS += myclass.h
Run Code Online (Sandbox Code Playgroud)

在你的.html添加

try {
    alert(MyClass.test("test string"));
} catch(err) {
    alert(err);
}
Run Code Online (Sandbox Code Playgroud)

在你的main.cpp添加中包括:

#include "myclass.h"
Run Code Online (Sandbox Code Playgroud)

并改变:

Html5ApplicationViewer viewer;
Run Code Online (Sandbox Code Playgroud)

至:

MyClass viewer;
Run Code Online (Sandbox Code Playgroud)