2024年最新QT与JavaScript交互 Qt调用JS脚本_qt js(2),2024年最新物联网嵌入式开发程序员

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

// 在js中调用的有返回值的成员函数
QString JsCallWithReturn();

private slots:

// html文件加载完成槽函数
void onPageLoadFinished(bool);

// QT调用js中的函数(无参、有参、有返回值的按钮槽函数)
void on\_btn\_noparam\_clicked();
void on\_btn\_withparam\_clicked();
void on\_btn\_withreturn\_clicked();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


#### mainwindow.cpp



#include “mainwindow.h”
#include “ui_mainwindow.h”
#include
#include
#include <QtWebKit/QWebView>
#include <QtWebKit/QWebPage>
#include <QtWebKit/QWebPage>
#include <QtWebKit/QWebFrame>
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);

// 加载资源中的 html
// ui->webView->load(QUrl("qrc:/html.html"));

// 加载本地html方式
ui->webView->load(QUrl::fromLocalFile("/home/guoqr/html.html"));

//页面加载完成的信号
connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(onPageLoadFinished(bool)));

//将QT窗口暴露给html( 通过信号槽函数执行进行暴露设置,在js中可以通过暴露的对象 对qt中的成员函数调用 )
connect(ui->webView->page()->mainFrame(),SIGNAL(javaScriptWindowObjectCleared()),this,SLOT(addMainWindowToHtml()));


//html调试窗口(可以显示js中打印的日志和显示js代码)
QWebSettings \*settings = ui->webView->settings();
settings->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
QWebInspector \*inspector = new QWebInspector(this);
inspector->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Dialog);
inspector->setMinimumSize(300, 110);
inspector->setPage(ui->webView->page());
inspector->show();

}

MainWindow::~MainWindow(){
delete ui;
}
//页面加载完成
void MainWindow::onPageLoadFinished(bool){
qDebug()<<PRETTY_FUNCTION<<__LINE__<webView->url().toString();
}

/// JS调用QT中的方法
/// 首先要通过 WebView 成员对象信号 javaScriptWindowObjectCleared链接槽函数addMainWindowToHtml
/// 在槽函数中,传入的第一个参数“QTWindow”是在JS中暴露的QT对象名称。第二个参数是第一个参数要表示的哪一个对象指针(对象是QObject子类)。
/// 在JS中调用的QT对象的函数必须是public并且是槽函数,经过slots声明的。

//暴露QT主窗口到html
void MainWindow::addMainWindowToHtml(){
ui->webView->page()->mainFrame()->addToJavaScriptWindowObject(“QTWindow”,this);
}

//暴露给js的无参函数
void MainWindow::JsCallNoParam(){
qDebug()<<PRETTY_FUNCTION<<__LINE__;
}
//暴露给js的有参函数
void MainWindow::JsCallWithParam(int num,QString str){
qDebug()<<PRETTY_FUNCTION<<__LINE__<<num<<str;
}
//暴露给js有返回值的函数
QString MainWindow::JsCallWithReturn(){
qDebug()<<PRETTY_FUNCTION<<__LINE__;
return QString(“This is a string from Qt window.”);
}

/// 调用JS中的方法(讲JS中的方法名称 和要传递的参数 以字符串的方式设置到evaluateJavaScript中)
/// 如果JS中的方法有返回值,用QVariant接收.

//无参调用JS
void MainWindow::on_btn_noparam_clicked(){
qDebug()<<PRETTY_FUNCTION<<__LINE__;
ui->webView->page()->mainFrame()->evaluateJavaScript(QString(“QtCallNoParam()”));
}
//有参调用JS
void MainWindow::on_btn_withparam_clicked(){
qDebug()<<PRETTY_FUNCTION<<__LINE__;
ui->webView->page()->mainFrame()->evaluateJavaScript(QString(“QtCallWithParam(123,“QT String Param.”)”));
}
//JS有返回值的情况
void MainWindow::on_btn_withreturn_clicked(){
QVariant ret = ui->webView->page()->mainFrame()->evaluateJavaScript(QString(“QtCallWithReturn()”));
qDebug()<<PRETTY_FUNCTION<<__LINE__<<" RET:"<<ret;
}


#### html.html




## Qt调用JS脚本


原文链接:<https://blog.csdn.net/GraceLand525/article/details/64906354>


程序通过调用js脚本的函数执行计算(将计算公式写入js脚本,在程序中通过传参数调用js脚本中的函数进行计算,最后将计算结果返回,显示到界面)


//DoJS.pro



#-------------------------------------------------

Project created by QtCreator 2017-03-22T10:16:33

#-------------------------------------------------

QT += core gui script

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = DoJS
TEMPLATE = app

SOURCES += main.cpp
widget.cpp

HEADERS += widget.h

FORMS += widget.ui

DISTFILES +=
TransCal.js

RESOURCES +=
dojs.qrc


### widget.h



#ifndef WIDGET_H
#define WIDGET_H

#include

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

void readJS();

private slots:
void on_btn_cal_clicked();

private:
Ui::Widget *ui;
};

#endif // WIDGET_H


### widget.cpp



#include “widget.h”
#include “ui_widget.h”

#include
#include
#include
#include
#include
#include

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);

ui->lineEdit_var1->setText("12");
ui->lineEdit_var2->setText("0.5");

}

Widget::~Widget()
{
delete ui;
}

void Widget::readJS()
{
QString result = “”;
QFile scriptFile(“:/TransCal.js”);
if (!scriptFile.open(QIODevice::ReadOnly))
{
result.clear();
qWarning() << “encodePass.js open failed”;
return;
}
QTextStream out(&scriptFile);
QString contents = out.readAll();
scriptFile.close();

double var1 = ui->lineEdit_var1->text().toDouble();
double var2 = ui->lineEdit_var2->text().toDouble();
qDebug() << "var1:" << var1 << "var2:" << var2;

QScriptValueList args;      //调用js方法时传入的参数
args << QScriptValue(var1) << QScriptValue(var2);
QScriptEngine engine;
QScriptValue js = engine.evaluate(contents);        //个人理解:加载js文本到操作引擎
QScriptValue func;
func = engine.globalObject().property("trans2wCal");   //调用js方法

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

ns2wCal"); //调用js方法

[外链图片转存中…(img-IVebzfcj-1715641567039)]
[外链图片转存中…(img-q4o9lIjk-1715641567040)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值