首页 > 其他分享 >【Qt】Qt与Js互相调用

【Qt】Qt与Js互相调用

时间:2023-01-31 09:49:44浏览次数:48  
标签:调用 qt js Js channel Qt

Qt与Js互相调用

目前使用场景有:

  1. 通过QWebEngineView,来加载某个urlhtml文件(需要包含特定js文件)。
  2. 通过QWebChannel绑定到QWebEngineView上,qt可以调用js暴露的接口,js也可以调用qt暴露的接口。

Qt调用Js示例

调用示例

QString strCall = QString("qtLogin('KFadmin','herx123###')"); // 填充js函数调用字符串
auto callback = std::bind(&ShowWeb::on_qt_call_js_callback_login, this, std::placeholders::_1); // 绑定回调函数,如果不需要处理回调返回结果,则可以省略。
m_web_engine_view->page()->runJavaScript(strCall, callback); // 调用js函数

注:

  1. 目前建议qtjs通信,js返回给qt的返回值,建议使用json格式,方便处理多返回值处理。如果js接口是异步返回,则不需要绑定回调。
  2. 如果js返回值是异步的,则需要js主动调用qt暴露的接口,而不是绑定回调函数。

Js调用Qt接口示例

js调用qt依赖qwebchannel.js文件,Qt会提供此文件。

<script type="text/javascript" src="./qwebchannel.js"></script>
<script type="text/javascript">
    var qt_channel = null;//qt通道,js调用此变量的方法来与qt客户端通信
    // 程序启动初始化
    window.onload = function () {
        if (typeof qt != "undefined") { // 如果qt有定义,说明是在qt客户端调用的此页面
            new QWebChannel(qt.webChannelTransport, function (channel) {
                qt_channel = channel.objects.qt_channel;    // 获取qt_channel,后续js通过此通道与qt进行交互
            });
        }
        else {
            alert("qt对象获取失败!");      // 非Qt客户端运行环境
        }
    }
    
    // js主动调用qt示例
    if (qt_channel)
    {
        qt_channel.alert_msg("js调用Qt");  // 调用qt的alert_msg函数,实现弹框功能
    }
	
</script>
注:

qwebchannel.js:该文件Qt自带的,参考目录D:\Qt\Examples\Qt-5.15.2\webchannel\shared\qwebchannel.js

目前使用的版本是:Qt-5.15.2,则Qt Creator编译项目时,也要使用Qt-5.15.2版本。

标签:调用,qt,js,Js,channel,Qt
From: https://www.cnblogs.com/ganshang/p/17077827.html

相关文章

  • centOs中使用nvm安装nodejs
    1.curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh|bash2.修改虚拟机hostgithub3.虚拟机根目录下面建一个workspace,将node安装到目录下(......
  • javascript:js 读写 style属性(DOM模型)
    javascript:js读写style属性(DOM模型)    一、说明: 1、js读取style属性,需要去掉css格式中的“-”,“-”后面的第一个字母大写。js中的减号(“-”),与css中属性......
  • js 摄像头拍照
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"conten......
  • 通过Edgio的EdgeJS最大限度提升您的应用程序的CDN性能
    关于在边缘战略性缓存动态内容的入门知识:它是如何工作的,以及为什么它比传统CDN更好。说到性能方面,大多数CDN提供商都做得很好,它们可以快速交付静态内容,为高峰流量期降低......
  • react官方文档-高级部分-深入JSX学习
    前言:jsx好多用法,现在还第一次使用。实际上,JSX仅仅只是 React.createElement(component,props,...children) 函数的语法糖。 指定React元素类型JSX标签的第一......
  • js 调用摄像头录像
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"conten......
  • Qt项目名称修改方法
    1.复制项目内容到新的文件夹中。修改文件夹名称    2.手动把 .pro的名字改写为新的项目名称。删除.pro.user文件  3.用QTCreator打开修改名字之后的......
  • 调用方法 不传参 求评委平均值
    packagecom.fqs.demo;importjava.util.Scanner;publicclassPingFen{publicstaticvoidmain(String[]args){//去掉最高分去掉最低分获取平均......
  • JavaScript JSON
    什么是JSONJSON的作用:JSON是用于存储和传输数据的格式;JSON通常用于服务端向网页传输数据;什么是JSON:JSON全称为:JavaScriptObjectNotation是一种轻量级的数据交......
  • 基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统
    基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统文章目录​​基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统​​​​前言介绍:​​​​功能设计:​......