2

少し問題があります。助けていただければ幸いです。

最初:私は数日間検索し、いくつかの異なる解決策を見つけましたが、それらはすべてうまくいきませんでした.

基本的に、HTML5 と Javascript を使用して小さなアプリケーションを作成しましたが、問題ありません。しかし、今はすべてのものをファイルに保存したいと思っています。それも実際の問題ではありません。fstream は十分に簡単です。

ここに私の問題があります: 関数を呼び出すにはどうすればよいですか? QtObjectの作成など、いくつかのアプローチを試しましたが、Javascript関数をC++関数に接続する必要があるため、もちろんうまくいきませんでした。そのため、JS-Bridge-Docu ( http://qt-project.org/doc/qt-4.8/qtwebkit-bridge.html ) を読みましたが、十分に理解できませんでした (これは間違いなく可能性の領域!)、または QtWeb クラスの 1 つではなく、組み込みの Html5ApplicationViewer クラスを使用するため、私の問題には十分に具体的ではありません。

解決策、または少なくともこの問題を解決する方法を教えてください。それが私のプロジェクトの唯一の難点なので、本当に頭がおかしくなりそうです。

現時点で私のコードは次のとおりです。

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

コードがあまり良くないことはわかっていますが、この問題が解決したらすぐにクリーンアップします。

4

2 に答える 2

0

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();
于 2014-02-24T09:25:06.107 に答える
0

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

CodeMirror.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 から呼び出されます...

于 2014-02-24T09:44:05.427 に答える