Qt与JavaScript互相调用
来源:互联网 发布:ct原理与图像重建算法 编辑:程序博客网 时间:2024/05/22 12:41
转载自:http://ldlnew.blog.163.com/blog/static/1060746201242994314216/
一、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<span courier="" new";="" mso-hansi-font-family:"courier="" new";mso-bidi-font-family:"courier="" mso-font-kerning:0pt;mso-ansi-language:x-none;"="" style="line-height: 22px; font-size: 10pt; font-family: 宋体;">与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>- Qt与JavaScript互相调用
- javascript 与vbscript 互相调用
- C#与JavaScript互相调用
- C#与JavaScript互相调用
- Android与JavaScript互相调用与通信。
- Silverlight与JavaScript的互相调用
- flash swf与浏览器javascript 互相调用
- Android API与Javascript之间互相调用
- javascript与java值互相调用
- android 与JavaScript的互相调用
- JavaScript与Objective-C的互相调用
- javascript与java的互相调用
- Flash Javascript 互相调用
- android中实现JavaScript与Java之间实现互相调用
- javascript与asp.net(c#)互相调用方法
- android中Webview与javascript的交互(互相调用)
- Flex与javaScript方法之间的互相调用
- 使用UIWebView时objective-c与javascript互相调用 1
- 备忘录模式(Memento)
- Keil5.15版本
- 爱惜电脑,从好习惯开始,服务开关脚本自己写。
- 使用GitHub
- 欢迎使用CSDN-markdown编辑器
- Qt与JavaScript互相调用
- 将任意Json字符串解析成Java对象
- android.os.networkonmainthreadexception强制解决方法
- 共享内存:mmap函数实现
- PHP : SOAP 协议调用 Web服务(WebService)(转)
- Google推荐的图片加载库Glide介绍
- 基于WebSocket构建移动端实时应用
- 简单.bat 代码蓝屏
- 如何通过shell脚本操作MongoDB