qt 执行html中的js,Qt和JavaScript相互调用

// mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

private:

Ui::MainWindow *ui;

public slots:

void jsInvokeQt(const QString &dir);

void addObjectToJs();

void qtInvokeJs();

};

#endif // MAINWINDOW_H

//mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include

#include

#include

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QString testPath = qApp->applicationDirPath() + "/test.html";

ui->webView->load(QUrl::fromLocalFile(testPath));

//支持js

QWebSettings *pWebSettings = ui->webView->page()->settings();

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

connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),

this,SLOT(addObjectToJs()));

connect(ui->btnToJs, SIGNAL(clicked()), this, SLOT(qtInvokeJs()));

}

MainWindow::~MainWindow()

{

QWebSettings::globalSettings()->clearMemoryCaches();

delete ui;

}

//将对象指针添加到JavaScript

void MainWindow::addObjectToJs()

{

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

}

// Qt调用JavaScript里qtInvokeJs函数

void MainWindow::qtInvokeJs()

{

ui->webView->page()->mainFrame()->evaluateJavaScript("qtInvokeJs()");

}

//js调用Qt的函数必须为槽函数

void MainWindow::jsInvokeQt(const QString &dir)

{

QFileInfo fi = QFileInfo(dir);

QString filePath;

filePath = fi.absolutePath();

QDesktopServices::openUrl(QUrl(filePath, QUrl::TolerantMode));

}

//main.cpp

#include "mainwindow.h"

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

// test.html

function qtInvokeJs()

{

alert("Qt invoke Js!")

}

function jsInvokeQt()

{

var path = "d:/";

MainWindow.jsInvokeQt(path);

}

FukWj0xXWT241vaQTBhd1b35KgUe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值