qt与js互相调用

二、QT支持Js流程

QT与JavaScript互调是通过QWebFrame的两个函数来实现的:addToJavaScriptWindowObject()将QObject对象传给JS,这样JS就能调用QObject的public slots函数。QT通过evaluateJavaScript()直接调用JS中的函数。流程如下(《QT高级编程》中插图):

三、示例

使用QWebKit创建一个包含浏览器和工具按钮窗口,在该浏览器中载入包括Js的html,工具按钮调用html中的js

1、工程中引入 webkit

工程文件中增加加:QT += webkit network

2、载入html网页

m_pWebView = new QWebView;

m_pWebView->load(QUrl(tr("G:\\html特效示例\\jsTest.html")));

3、开户js支持

QWebSettings *pWebSettings = m_pWebView->page()->settings();

pWebSettings->setAttribute(QWebSettings::JavascriptEnabled,true);

4、窗体布局

//添加按钮

QPushButton *pEventBtn = new QPushButton(tr("QT Invok Js"));

QPushButton *pcloseBtn = new QPushButton(tr("close"));

//布局:网页与按钮为上下布局,两按钮为水平居中布局

QHBoxLayout *pBtnLayout = new QHBoxLayout;

pBtnLayout->addWidget(pEventBtn);

pBtnLayout->addWidget(pcloseBtn);

pBtnLayout->setAlignment(Qt::AlignCenter);

QVBoxLayout *pMainLayout = new QVBoxLayout;

pMainLayout->addWidget(m_pWebView);

pMainLayout->addLayout(pBtnLayout);

QWidget *widget = new QWidget;

widget->setLayout(pMainLayout);

setCentralWidget(widget);

5、建立信号与槽

//每次载入html时发送段信号

connect(m_pWebView->page()->mainFrame(),SIGNAL(javaScriptWindowObjectCleared()),  this,SLOT(addObjectToJs()));

//按钮信号

connect(pEventBtn,SIGNAL(clicked()),this,SLOT(testJs()));

connect(pcloseBtn,SIGNAL(clicked()),this,SLOT(close()));

6、JS调用QT中的public slots

6.1、头文件中申明public slots:

public slots:

void jsInvokQt();

6.2、将QObject与js绑定

void MainWindow::addObjectToJs()

{

m_pWebView->page()->mainFrame()->addToJavaScriptWindowObject("MainWindow",this);

}

6.3、Js中调用QT的 jsInvokQt()函数

function disp_qtmessage()

{

MainWindow.jsInvokQt();

}

7、QT调用JS函数disp_messagebox()

void MainWindow::testJs()

{

m_pWebView->page()->mainFrame()->evaluateJavaScript("disp_messagebox()");

}

四、附含JS的html源码:

<html>

<head>

<script type="text/javascript">

function disp_messagebox()

{

alert("This is javaScript MessageBox!")

}

function disp_qtmessage()

{

MainWindow.jsInvokQt();

MainWindow.setInfor("Qt change string");

alert(MainWindow.getInfor());

}

</script>

</head>

<body>

<input type="button" onclick="disp_qtmessage()" value="InvokQt" />

</body>

</html>

时间: 2024-12-09 02:48:10

qt与js互相调用的相关文章

Qt与JS(三)

Qt不错的学习网址: http://www.cnblogs.com/findumars/p/5529526.html ---------------------------------------------------- IE内核,qt调用js:qt写com组件,html就可以调用qt 可以百度 QAxBindable  会搜索到比较有用的文章 http://blog.csdn.net/csxiaoshui/article/details/47333989 http://blog.csdn.n

如何在android平台上使用js直接调用Java方法[转]

转载自:http://www.cocos.com/docs/html5/v3/reflection/zh.html #如何在android平台上使用js直接调用Java方法 在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parame

【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) 在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回

【cocos2d-js官方文档】二十三、如何在IOS平台上使用js直接调用OC方法

在Cocos2d-JS v3.0 RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Mac上js直接调用Objective-C的方法,示例代码如下: var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....); 在jsb.reflection.callStaticMethod方法中,我们通过传入OC的类名,方法名,参数就可以直接调用OC的静态方法,并且

【Qt】使用QProcess调用其它程序或脚本

大概试了一下,还是不错的,不过字符编码问题还不太好解决: 代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QProcess> #include <QTextCodec> #include <QCloseEvent> MainWindow::MainWindow(QWidget *parent)

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import org.s

flex与js相互调用

1.flex调用js方法 调用方法例如:ExternalInterface.call("UploadComplete",oldName,uidName,_dir+"/"+uidName+type); 第一个是js方法名,后面几个是给这个js方法传的参数.这个方法必须在网页的js中注册,否则会调用失败. 需要注意的是调用之前需要检查网页的js是否已完成加载,用ExternalInterface.available可是判断. 注:这种调用方法是可以有返回值的,例如:va

js中调用ocx控件

项目中经常遇到js中要调用c++控件情况,通过控件来实现相关功能操作.如视频控件等 具体js中引用 object的classid 代码参考如下: <body id="body" > <div id="div" style="width:100%;height:100%;"> <object classid="clsid:61978326-6772-4595-9EC3-D23C5CD5E61F" w

OC与JS互相调用

最近项目中要用到html5来实现,涉及到OC调用JS,以及JS调用OC的方法,这里把遇到的问题以及实现方法介绍一下. // // ViewController.h // OC_And_JS // // Created by 张杰 on 15/7/9. // Copyright © 2015年 张杰. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController <U