• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-3  評(píng)論-13  文章-10  trackbacks-0
            在QT里面,我們可以很方便地調(diào)用QtWebKit類庫(kù),來(lái)實(shí)現(xiàn)一個(gè)瀏覽器的開(kāi)發(fā)
            基于Html的界面在開(kāi)發(fā)效率,可移植性上都十分有優(yōu)勢(shì),所以也被很多程序采用,只是我們平時(shí)沒(méi)注意到而已

            下面先說(shuō)一下,如何創(chuàng)建一個(gè)簡(jiǎn)易的瀏覽器
            通過(guò)VS2008+QTSDK,創(chuàng)建一個(gè)qt4 GUI工程:

            記住,一定要選上QtWebKit和QNetwork(這個(gè)后面要用到)...

            寫(xiě)如下一段代碼,一個(gè)瀏覽器就做成了:
            main.cpp
             1#include <QtGui/QApplication>
             2#include <QWebView>
             3#include <QMainWindow>
             4
             5int main(int argc, char *argv[])
             6{
             7    QApplication a(argc, argv);
             8    QMainWindow window;
             9    QWebView view(&window);
            10    view.setGeometry(00600400);
            11    view.setUrl(QUrl("http://www.shnenglu.com/boymaster"));
            12    window.show();
            13    return a.exec();
            14}

            15
            QWebView有兩種方法可以用來(lái)設(shè)定要顯示的內(nèi)容,一個(gè)是setUrl方法,一個(gè)是setContent方法。 這個(gè)很簡(jiǎn)單,試一下就會(huì),不多說(shuō)了

            進(jìn)入正題了,接下來(lái)介紹一下,如何實(shí)現(xiàn)js與C++的雙向調(diào)用
            這里,僅介紹開(kāi)發(fā)中用到的一種調(diào)用方式, 用QWebFrame的addToJavaScriptWindowObject方法
            個(gè)人比較推薦這種方式,易為理解~~~

            1. JS如何調(diào)用C++函數(shù),詳見(jiàn)代碼~~~
            myobject.h
             1#ifndef MYOBJECT_H
             2#define MYOBJECT_H
             3
             4#include<QObject>
             5#include<QWebPage>
             6#include<QWebFrame>
             7
             8// !! ATTENTION !! : The object do NOT need to inherit from QWidget anymore.
             9class MyObject :public QObject {
            10    Q_OBJECT
            11private:
            12    QWebPage *page;
            13public:
            14    MyObject(QWebPage *page) : page(page) { }
            15public slots:
            16    void func(QString arg) {
            17        this->page->mainFrame()->evaluateJavaScript("document.body.innerHTML += '" + arg + "';");
            18    }

            19}
            ;
            20
            21#endif // MYOBJECT_H
            22

            main.cpp
             1#include <QtGui/QApplication>
             2#include <QMainWindow>
             3#include <QWebView>
             4#include <QWebPage>
             5#include <QWebFrame>
             6#include "MyObject.h"
             7
             8int main(int argc, char *argv[])
             9{
            10    QApplication a(argc, argv);
            11    QMainWindow window;
            12    QWebView view(&window);
            13    QWebPage page;
            14    view.setPage(&page);
            15    view.setGeometry(00600400);
            16    MyObject obj(&page);
            17    page.mainFrame()->addToJavaScriptWindowObject("qt"&obj);
            18    QString content("<script>function f() { qt.func('http://www.shnenglu.com/boymaster'); }</script>");
            19    content += "<a href='javascript:f()'>Click Me</a>";
            20    view.setContent(content.toAscii());
            21    window.show();
            22
            23    return a.exec();
            24}

            25
            這樣,當(dāng)點(diǎn)擊頁(yè)面上的"Click Me",script腳本用會(huì)調(diào)用到C++中的func函數(shù)~~~

            2.C++調(diào)用JS腳本
            myobject.h
             1class MyObject :public QObject {
             2    Q_OBJECT
             3
             4private:
             5    QWebPage *page;
             6    QTimer *timer;
             7
             8public:
             9    MyObject(QWebPage *page) : page(page) {
            10        timer = new QTimer;
            11        connect(timer, SIGNAL(timeout()), this, SLOT(slotTimerOut()));
            12        timer->start(1000);
            13    }

            14
            15signals:
            16    void signalObjTimerOut();
            17
            18private slots:
            19    void connectSlots() {
            20        page->mainFrame()->evaluateJavaScript("DevObject.signalDevObjTimerOut.connect(f);");
            21    }

            22
            23    void slotTimerOut() {
            24        emit signalObjTimerOut();
            25    }

            26}
            ;
            27
            28#endif // MYOBJECT_H

            main.cpp
             1int main(int argc, char *argv[])
             2{
             3    QApplication a(argc, argv);
             4    QMainWindow window;
             5    QWebView view(&window);
             6    QWebPage page;
             7    view.setPage(&page);
             8    view.setGeometry(00600400);
             9    MyObject obj(&page);
            10    QObject::connect(&view, SIGNAL(loadFinished(bool)), &obj, SLOT(connectSlots()));
            11    page.mainFrame()->addToJavaScriptWindowObject("qt"&obj);
            12    QString content("<SCRIPT>function f() { document.body.innerHTML += 'http://www.shnenglu.com/boymaster'; }</SCRIPT>");
            13    view.setContent(content.toAscii());
            14    window.show();
            15    return a.exec();
            16}

            17

            這樣,頁(yè)面加載后,C++的Timer每隔1秒就會(huì)調(diào)用到JS的f()函數(shù)
            posted on 2012-11-09 10:45 雙魚(yú)座的程序員 閱讀(455) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Qt/C++
            久久综合狠狠综合久久97色| av无码久久久久不卡免费网站| 国产免费久久精品99久久| 色欲久久久天天天综合网| 91视频国产91久久久| 久久久精品久久久久特色影视| 久久人人添人人爽添人人片牛牛 | 久久无码中文字幕东京热| 久久精品国产精品亚洲精品| 嫩草伊人久久精品少妇AV| 国内精品久久久久影院网站| 久久人人爽人人爽人人av东京热| 午夜不卡888久久| 日产精品久久久久久久| 国产精品成人精品久久久| 久久人人爽人人爽人人爽| 99久久精品九九亚洲精品| 久久香综合精品久久伊人| 国产综合成人久久大片91| 久久AV高清无码| 久久精品无码一区二区WWW| 国内精品久久久久久久久电影网| 亚洲乱码中文字幕久久孕妇黑人| 国产精品久久久久久久午夜片| 日日噜噜夜夜狠狠久久丁香五月 | 7777精品久久久大香线蕉| 99久久er这里只有精品18| 伊人 久久 精品| 久久中文字幕视频、最近更新| 久久精品国产99久久丝袜| 麻豆成人久久精品二区三区免费| 色综合久久久久无码专区| 亚洲人成无码网站久久99热国产 | 污污内射久久一区二区欧美日韩 | 99久久国产宗和精品1上映| 大美女久久久久久j久久| 国产综合久久久久| 亚洲国产精品无码久久久不卡| 日韩精品无码久久久久久| 久久久久久午夜精品| 香蕉99久久国产综合精品宅男自 |