Qt和JavaScript相互调用

来源:互联网 发布:便签的元数据已损坏 编辑:程序博客网 时间:2024/06/05 01:19

// mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QWebView>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    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 <QFileDialog>#include <QWebFrame>#include <QDesktopServices>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));//支持jsQWebSettings *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;}//将对象指针添加到JavaScriptvoid 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 <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}

// test.html

<html><head><script type="text/javascript">function qtInvokeJs(){    alert("Qt invoke Js!")} function jsInvokeQt(){var path = "d:/";  MainWindow.jsInvokeQt(path);} </script></head><body> <input type="button" onclick="jsInvokeQt()" value="js invoke qt" /> </body></html>


原创粉丝点击