QT与JavaScript互调 - 虹的日志 - 网易博客

QT与JavaScript互调  

2012-05-29 21:43:14|  分类: 技术 |  标签:qt  javascript  webkit  qwebkit   |举报 |字号大中小 订阅

 
 

一、QT中文支持

 

//编码设置

  QTextCodec *codec = QTextCodec::codecForName("GBK");  

  QTextCodec::setCodecForCStrings(codec);    

  QTextCodec::setCodecForLocale(codec); 

  QTextCodec::setCodecForTr(codec);

 

//使用中文字符串

setWindowTitle(tr("JavaScript测试"));

 

二、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>

QT与JavaScript互调 - 虹的日志 - 网易博客的更多相关文章

  1. jquery选择器 之 获取父级元素、同级元素、子元素 - yes的日志 - 网易博客

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  2. 【绿茶书情】:《SOHO小报》和《凤… - 绿茶的日志 - 网易博客

    [绿茶书情]:<SOHO小报>和<凤- - 绿茶的日志 - 网易博客 [绿茶书情]:<SOHO小报>和<凤-  

  3. python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客

    python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客 python海明距离   2009-10-01 09:50:41|  分类: Python |  标签: |举报 |字号大中小  ...

  4. stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客

    stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客 stringstream clear()的疑问   2013-09-05 08:43:13|  分类: ...

  5. Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客

    Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客 Org-mode五分钟教程ZZZ  

  6. 【错误】expected constructor, destructor, or type conversion before '.' token - 第八个游侠的日志 - 网易博客

    [错误]expected constructor, destructor, or type conversion before '.' token - 第八个游侠的日志 - 网易博客 [错误]expe ...

  7. random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客

    random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客 random_shuffle (stl算法)打乱顺序 2012-03-31 10:39:11|  分类: 算法 | ...

  8. 你有PSD的学位吗? - dp的日志 - 网易博客

    你有PSD的学位吗? - dp的日志 - 网易博客 你有PSD的学位吗? 2011-08-01 12:58:40|  分类: 感悟 |  标签:自我提升   |字号 大中小 订阅       去年, ...

  9. Java内存回收 - 落日之心的日志 - 网易博客

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. fckeditor使用详解

    FCKEditor是一个很好的用于Web页面中的格式化文本编译控件.现在越来越多的论坛的发帖页面中更多的使用了这个控件,我们这里将如何在基于Java的web开发中使用FCKEditor控件的步骤提供给 ...

  2. Struts2问题,已解决No result defined for action and result input

    struts2.1.8 必须在struts.xml中配置namespace属性 如果你在2.0中一切OK,但是在2.1中确出现了No result defined for action的异常,就是在因 ...

  3. virtualbox 虚拟机网络设置

    1.宿主机网卡设置 virtualbox 第一块网卡设置 virtualbox第二块网卡设置 2.虚拟机网络设置 找到以上设置中MAC地址对应的那个网卡: 配置网络: 重启网络,ok.

  4. python 日期、时间戳转换

    获取当前日期: from datetime import datetime IN:datetime.now() OUT:datetime(2016,10,19,6,51,21,72341) 转化为字符 ...

  5. 图的邻接链表实现(c)

    参考:算法:C语言实现 一书 实现: #ifndef GRAPH #define GRAPH #include<stdio.h> #include<stdlib.h> stru ...

  6. RejexLib

    http://www.regexlib.com/ http://www.brics.dk/automaton/index.html http://code.google.com/p/automatap ...

  7. Office 2010 SP2简体中文正式版下载

    此次发布的SP2包含最新的更新,提高安全性.性能和稳定性,此外SP2还是之前发布的所有更新.累积性更新的汇总.SP2还改善了Office 2010与IE10.Windows 8.Windows Ser ...

  8. aliyun 启用ECS iptables

    iptables -t nat -A POSTROUTING -s 0.0.0.0/24 -o eth0 -j MASQUERADEservice iptables saveecho 1 > / ...

  9. current imporant Posts

    CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete) http://www.centos.org/docs/5/htm ...

  10. log4j 详解

      转载自:http://www.blogjava.net/hwpok/archive/2008/08/23/223891.html >>>>1. 概述<<< ...