QT5 Html5ApplicationViewer语言 - C++ call?

QT5 Html5ApplicationViewer - C++ call?

本文关键字:call C++ Html5ApplicationViewer 语言 QT5      更新时间:2023-10-16

我遇到一个小问题,希望你能帮助我。

第一:我找了好几天,找到了一些不同的解决方法,但它们都不适合我。

我基本上使用HTML5和Javascript构建了一个小应用程序-没有问题。但现在我想把所有的东西都保存到一个文件中。这也不是真正的问题,流很简单。

现在我的问题是:我如何调用我的函数?我尝试了几种方法,比如创建一个QtObject之类的东西,但这当然不起作用,因为我必须将javascript函数与我的c++函数连接起来。因此,我阅读了JS-Bridge-Docu(http://qt-project.org/doc/qt-4.8/qtwebkit-bridge.html),但要么我对它的理解不够好(这绝对是在可能性的领域!),要么它对我的问题不够具体,因为我使用内置的html5applicationviewer类,而不是qtweb类之一。

你能给我解决这个问题的方法吗?或者至少给我一个解决这个问题的方法。它真的快把我逼疯了,因为这是我项目中唯一的困难。

现在我的代码是:

#include <QApplication>
#include <fstream>
#include "html5applicationviewer.h"
using namespace std;
void initFile() {
    fstream f;
    f.open("music.nxc", ios::trunc|ios::out);
    f << "task main() {" << endl;
    f.close();
}
class fileSave : public QObject {
public:
    void saveToFile();
};
void fileSave::saveToFile() {
    fstream f;
    f.open("music.nxc", ios::out|ios::app);
    f << "success!" << endl;
    f.close();
}
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    Html5ApplicationViewer viewer;
    viewer.resize(1280, 800);
    viewer.setOrientation(Html5ApplicationViewer::ScreenOrientationAuto);
    viewer.showExpanded();
    viewer.loadFile(QLatin1String("html/index.html"));
    initFile();
    fileSave file;
    return app.exec();
}

我知道代码不是很好,但问题解决后我会马上清理它。

abc.h

protected slots:
    void f();

abc.cpp

//in constructor
//make sure that page already loaded
webView->page()->mainFrame()->addToJavaScriptWindowObject("qt", this);

// implement function
void Abc::f()
{
    // do what you want to do
}

abc.js

qt.f();

我在Qt WebView中接口了CodeMirror,这里是基本接口

void CodeMirror::loadFinished(bool ok) {
    emit userMessage(log, QString("loadFinished %1... (len %2, ok %3)").arg(text.left(20)).arg(text.length()).arg(ok));
    if (ok) {
        frame()->addToJavaScriptWindowObject("proxy", this);
        if (text.length())
            run("editor.setValue(proxy.plainText)");
        run("editor.on("change", function() { proxy.onChange() })");
    }
}
在codemmirror。h中,我有
//! serve F1 in editor
Q_INVOKABLE void helpRequest(QString topic);

允许从JavaScript调用Qt。例如,从CodeMirror.html

extraKeys: {"F1": function(cm) {proxy.helpRequest (cm.getTokenAt (cm.getCursor ()) .string)}}

反过来,我有

void CodeMirror::run(QString script) const {
    frame()->evaluateJavaScript(script);
}

可以看到,它是从loadFinished调用的。