8

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

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

  1. myApp.pro
  2. html5applicationviewer.pri // 注释说不要碰这个文件
  3. html5applicationviewer.h // 注释说不要碰这个文件
  4. html5applicationviewer.cpp // 注释说不要碰这个文件
  5. 主文件
  6. 索引.html

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

4

1 回答 1

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);
};

添加一个名为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++");
}

在你的.pro添加

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

在你的.html添加

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

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

#include "myclass.h"

并改变:

Html5ApplicationViewer viewer;

至:

MyClass viewer;
于 2013-09-01T19:33:54.883 回答