QT5 Html5ApplicationViewer语言 - C++ call?
QT5 Html5ApplicationViewer - C++ call?
我遇到一个小问题,希望你能帮助我。
第一:我找了好几天,找到了一些不同的解决方法,但它们都不适合我。
我基本上使用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调用的。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- "no matching function for call to 'Vector::Vector'"错误
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 模板规范获取'Ambiguous call to overloaded function'
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- Incomings Call with Android Sip stack in Embarcadero C++ bui
- 学习 c++,编译错误"no matching function for call"
- 结构错误:"no matching function for call to "
- 创建函数变体向量时"No matching function for call"错误
- C++线程"Call to non-static member function without an object argument"
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 如果子类中没有构造函数方法,则错误"no matching function for call to 'LGame::LGame(String&)'"
- 提升多精度浮点数128:标准::exp错误:'no matching function for call'
- "error: no matching function for call to",我无法更改结构的定义
- 如何修复以下错误"no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- 替换派生对象向量中的对象"no matching function to call"
- ROS CPP 相当于 Python subprocess.call() 和 shell=True
- (C++)构造函数、默认参数"call of overloaded... ambigous"
- 我的程序显示许多错误,"error: no matching function for call to 'getPercentScore'"