100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > qt调用html里面的函数吗 QT和JS的互相调用例子

qt调用html里面的函数吗 QT和JS的互相调用例子

时间:2020-01-16 20:40:27

相关推荐

qt调用html里面的函数吗 QT和JS的互相调用例子

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

/* 载入html网页 */

m_pWebView = new QWebView();

m_pWebView->load(QUrl("file:///D:/jsTest.html"));

m_pWebView->show();

/* 开启JavaScript支持 */

QWebSettings *pWebSettings = m_pWebView->page()->settings();

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

/* 窗体布局, 添加按钮 */

QPushButton *pEventBtn = new QPushButton(tr("QT Invoke JavaScript web page Object"));

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);

/* 建立信号与槽, 每次载入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()));

testStr.clear();

}

MainWindow::~MainWindow()

{

if(m_pWebView != NULL)

{

delete m_pWebView;

m_pWebView = NULL;

}

/* 必须的,否则,在debug编译模式下就会出现leak错误 */

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

delete ui;

}

/* 这个public slot槽函数是为了响应JavaScript的的invoke的 */

void MainWindow::jsInvokeQt()

{

qDebug()<

}

/* 将MainWindows这个类的名称&&对象指针发送给JavaScript */

void MainWindow::addObjectToJs()

{

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

}

/* Qt来 invoke JavaScript里面的disp_messagebox()函数 */

void MainWindow::testJs()

{

qDebug()<

m_pWebView->page()->mainFrame()->evaluateJavaScript("disp_messagebox()");

}

/* JavaScript invoke Qt里面的public slot 槽函数 */

void MainWindow::setInfor(const QString str)

{

qDebug()<

if(str.isEmpty())

{

qDebug()<

return;

}

else

{

testStr = str;

}

}

/* JavaScript invoke Qt里面的public slot 槽函数 */

QString MainWindow::getInfor()

{

qDebug()<

return testStr;

}

-----------------------------------------------------------------------------

functiondisp_messagebox()

{

alert("ThisisjavaScriptMessageBoxcomefromalert!")

}

functiondisp_qtmessage()

{

alert("disp_messageboxfunction,whoisinJavaScript!")

MainWindow.jsInvokeQt();

MainWindow.setInfor("Qtchangestring");

alert(MainWindow.getInfor());

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。