QT:将任何C 对象暴露于JavaScript
Qt: Expose any C++ object to Javascript
我想将C 对象从我自己的类公开到JavaScript。
一个例子可能会澄清,我到底要实现什么。在一个特定的项目中,我正在尝试编程一些简单的ShopApp。
所以我该如何使这样的事情成为可能(其中 mySqlObj
是我的 sqlfunctions
-object):
$(document).ready(function(){
$("#someButtonId").click(function(){
mySqlObj.refillBalance(1000); // adds 1000 units of money to user's account
// or
mySqlObj.listAllPorducts();
});
});
那里我有一个名为sqlfunctions
的课程。sqlfunctions.h
看起来像
#ifndef SQLFUNCTIONS_H
#define SQLFUNCTIONS_H
#include <iostream>
#include <vector>
#include <algorithm>
#include <QSqlQuery>
#include <QSql>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QObject>
#include <QString>
#include "product.h"
class product;
using namespace std;
typedef vector<product>::iterator iter;
class sqlfunctions:public QObject{
Q_OBJECT
public:
sqlfunctions();
signals:
void purchaseDone(vector<product> cart);
void adminLoggedIn();
public slots:
// Warenmanagement
product isAlreadyInCart(product myProduct);
void listAllProducts();
void addToCart(product myProduct);
void showCart();
void clearCart();
void changeAmount(product myProduct, string mode);
void changeAmount(product myProduct, int diff, string mode);
int checkStock();
double checkBalance();
void purchase();
// Usermanagement
void registerUser(QString username, QString password);
void login(QString username, QString password);
void empowerUser();
void disempowerUser();
void listAllUsers();
void refillBalance(int amount);
private:
// Accountmanagement
vector<product> cart;
bool isLogin;
bool isAdminLoggedIn;
int uid;
QSqlDatabase db;
};
#endif // SQLFUNCTIONS_H
我的main.cpp
当前看起来如下:
#include <QApplication>
#include <QGraphicsWebView>
#include <QWebFrame>
#include <QtWebKit>
#include "html5applicationviewer.h"
#include "sqlfunctions.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
sqlfunctions obj;
Html5ApplicationViewer viewer;
viewer.setOrientation(Html5ApplicationViewer::ScreenOrientationAuto);
viewer.showExpanded();
viewer.loadFile(QLatin1String("src/index.html"));
viewer.setFixedSize(1200, 900);
QWebFrame *frame = viewer.webView()->page()->mainFrame();
QString objJavascriptName = "mySqlObj";
frame->addToJavaScriptWindowObject(objJavascriptName, &obj);
return app.exec();
}
我已经考虑了文档和该线程(在这里更类似),但是So-thread似乎已经过时了,因为该示例并未在构建过程/目录中编译和奇怪的麻烦。
由于sqlfunctions
从QObject
继承,您可以将sqlfunctions*
传递给期望QObject*
的函数:
frame->addToJavaScriptWindowObject(objJavascriptName, &obj);
相关文章:
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 嘿,我正在尝试将此c ++转换为javascript,但有些东西不起作用
- C++中的 JavaScript 样式闭包
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 在C++中嵌入 Mozilla 的 JavaScript 引擎
- Javascript 找不到使用 emscripten 编译的导出 WASM 函数
- 在Javascript和C++中计算MD5哈希的不同结果
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- 如何使用EM_JS从带有参数的C++调用javascript方法
- JavaScript 中的一等函数和 C++ 中的函数声明
- 在 v8 JavaScript 中重复调用C++是否有巨大的开销?
- 在QtWebEngine中捕获JavaScript事件
- JavaScript箭头函数:我们能否像C ++ lambdas一样捕获值
- 我可以使用谷歌 v8 在回调函数中获取 JavaScript 函数C++源文本吗?
- 如何像在javascript中一样"push" c ++映射
- 如何读取 Javascript 文件
- 如何在 C++ 中从 V8 调用 Javascript 函数
- 在 c++ 中是否有像 javascript 中那样"includes()"的方法
- QT:将任何C 对象暴露于JavaScript