关于Qwebkit与Html之间的那点破事儿

         最近这段时间,正在用QWebkit开发一个企业内部项目管理的项目。需求只说客户端只使用QWebview加载一个登陆网页即可,谁知道后来发现其他需求支撑,没有那边简单,因为企业内部随时推送消息,需要每个客户端的用户id,所以还是需要获取网页的一些信息,然后我只能研究一下c++与js之间的交互。

首先新建一个类QWebkitTest类继承Qwidget

.h的代码:

#ifndef QWEBKITTEST_H
#define QWEBKITTEST_H

#include <QDialog>
#include <QString>
#include <QWidget>
#include <QWebView>
#include <QWebFrame>
#include <QTextEdit>
#include "mywebkit.h"

namespace Ui {
class QWebKitTest;
}
class QWebKitTest : public QDialog
{
    Q_OBJECT
    
public:
    explicit QWebKitTest(QWidget *parent = 0);
    ~QWebKitTest();

    void setValueFromWeb(const QString &strName,const QString &strPwd);

protected slots:
    void onBtnCallJSClicked();
    void populateJavaScriptWindowObject();
    
private slots:
    void on_pushButton_clicked();

private:
    Ui::QWebKitTest *ui;
    //MyWebKit* m_webObj;
    class MyWebKit* m_webObj;
};

#endif // QWEBKITTEST_H

具体cpp代码为:

#include "qwebkittest.h"
#include "ui_qwebkittest.h"

QWebKitTest::QWebKitTest(QWidget *parent) :
    QDialog(parent)
{
    m_webObj = new MyWebKit(this);
    ui->setupUi(this);
    ui->webView->setUrl((QUrl("qrc:/test.html")));
    connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(populateJavaScriptWindowObject()));

}

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

void QWebKitTest::setValueFromWeb(const QString &strName, const QString &strPwd)
{
    ui->textEdit->setText(strName);
    ui->textEdit_2->setText(strPwd);
}

void QWebKitTest::onBtnCallJSClicked()
{
    QString strVal = QString("callfromqt(\"%1\",\"%2\");").arg(ui->textEdit->toPlainText()).arg(ui->textEdit_2->toPlainText() );
    ui->webView->page()->mainFrame()->evaluateJavaScript(strVal);
}

void QWebKitTest::populateJavaScriptWindowObject()
{
    qDebug()<<"populateJavaScriptWindowObject";
    ui->webView->page()->mainFrame()->addToJavaScriptWindowObject(QString("mywebkit"),m_webObj);
}

void QWebKitTest::on_pushButton_clicked()
{
    onBtnCallJSClicked();
}
另外我贴出html部分代码:
<html>
    <head>
      <title>Login page</title>

        <script language="javascript" >
        function calltoqt()
        {
          var nameArray;
          nameArray = document.getElementsByName("username");
          var pwdArray;
          pwdArray = document.getElementsByName("userpwd");
          //alert("=======4======="+pwdArray[0].value+"/"+nameArray[0].value);
          window.mywebkit.onCall(nameArray[0].value,pwdArray[0].value);

        }

        function callfromqt(name,pwd)
        {
            var nameArray;
            nameArray = document.getElementsByName("username");
            var pwdArray;
            pwdArray = document.getElementsByName("userpwd");
            nameArray[0].value = name;
            pwdArray[0].value = pwd;
        }

      </script>

    </head>
    <body>
        <p align="center">Name:
        <input type="text" name="username" />
        </p>

        <p align="center">Pswd:
        <input type="password" name="userpwd"  />
        </p>
        <p align="center" >
        <input type="button" value="Submit" onclick="calltoqt()" />
        </p>
    </body>
  </html>


你可能感兴趣的:(html,类,qt)