--添加object到javascript对象中
webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);
第一个参数是javascript中的名字,第二个参数是对象
注:必须将上述的添加连接到javaScriptWindowObjectCleared信号,确保每次新页面也会有效
connect(webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(addJavaScriptWindowObjectMethod()));
--javascript访问属性
cpp中:
Q_PROPERTY(float blue READ lastBlue);
float lastBlue();
javascript中:
obj.blue
--javascript调用object方法
cpp中:object方法声明为public slots或者public并使用Q_INVOKABLE来修饰 (signal可以直接调用吗?没有尝试)
javascript中:使用name.method()调用
--javascript连接object signal
cpp中:
public signals:
void nameChanged();
void progressChanged(int completed, int total);
javascript中:
function onNameChanged() {
}
function progress(int complete, int total) {
}
function connectSlot() {
obj.nameChanged.connect(this, onNameChanged); //disconnect
obj.progressChanged.connect(this, progress);
}
--参数的传递:
函数调用中参数传递支持最基本的类型,复杂类型可以通过QVariant和QVariantMap来包装
===使用QVariant包装一个void *指针
webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);
第一个参数是javascript中的名字,第二个参数是对象
注:必须将上述的添加连接到javaScriptWindowObjectCleared信号,确保每次新页面也会有效
connect(webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(addJavaScriptWindowObjectMethod()));
--javascript访问属性
cpp中:
Q_PROPERTY(float blue READ lastBlue);
float lastBlue();
javascript中:
obj.blue
--javascript调用object方法
cpp中:object方法声明为public slots或者public并使用Q_INVOKABLE来修饰 (signal可以直接调用吗?没有尝试)
javascript中:使用name.method()调用
--javascript连接object signal
cpp中:
public signals:
void nameChanged();
void progressChanged(int completed, int total);
javascript中:
function onNameChanged() {
}
function progress(int complete, int total) {
}
function connectSlot() {
obj.nameChanged.connect(this, onNameChanged); //disconnect
obj.progressChanged.connect(this, progress);
}
--参数的传递:
函数调用中参数传递支持最基本的类型,复杂类型可以通过QVariant和QVariantMap来包装
===使用QVariantMap包装一个结构,javascript中则是Joson来对应
static void unpack(QVariantMap &map, MyStruct *st)
{
#define Retrieve(name, type, convert, def) \
if (map.end() != map.find(#name)) \
{ \
st->name = (type)map[#name].convert(); \
} \
else \
{ \
st->name = def; \
}
Retrieve(name, QString, toString, "");
Retrieve(age, int, toInt, 0);
}
static void pack(QVariantMap &map, MyStruct *st)
{
map["name"] = st->name;
map["age"] = st->age;
}
===使用QVariant包装一个void *指针
static void* unpackPointer(QVariant &var)
{
long add = var.toLongLong();
void *p = (void*)add;
return p;
}
static void packPointer(QVariant &var, void*p)
{
long add = (int)p;
var.setValue(add);
}