QT源码阅读——QT与HTML交互编程
来源:互联网 发布:原生js特效懒人之家 编辑:程序博客网 时间:2024/06/11 13:34
QT中通过QWebKit组件处理HTML,其中最重要的就是QWebView了~~~
通过例子formextractor我们可以窥之一二:
/******************************************************************************** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).** Contact: http://www.qt-project.org/legal**** This file is part of the examples of the Qt Toolkit.**** $QT_BEGIN_LICENSE:BSD$** You may use this file under the terms of the BSD license as follows:**** "Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions are** met:** * Redistributions of source code must retain the above copyright** notice, this list of conditions and the following disclaimer.** * Redistributions in binary form must reproduce the above copyright** notice, this list of conditions and the following disclaimer in** the documentation and/or other materials provided with the** distribution.** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names** of its contributors may be used to endorse or promote products derived** from this software without specific prior written permission.****** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."**** $QT_END_LICENSE$******************************************************************************/#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include "formextractor.h"QT_BEGIN_NAMESPACEclass QAction;class QMenu;QT_END_NAMESPACEclass MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow();private slots: void about();private: FormExtractor *centralWidget; QMenu *fileMenu; QMenu *helpMenu; QAction *exitAct; QAction *aboutAct; QAction *aboutQtAct; void createActions(); void createMenus();};#endif // MAINWINDOW_H
/******************************************************************************** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).** Contact: http://www.qt-project.org/legal**** This file is part of the examples of the Qt Toolkit.**** $QT_BEGIN_LICENSE:BSD$** You may use this file under the terms of the BSD license as follows:**** "Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions are** met:** * Redistributions of source code must retain the above copyright** notice, this list of conditions and the following disclaimer.** * Redistributions in binary form must reproduce the above copyright** notice, this list of conditions and the following disclaimer in** the documentation and/or other materials provided with the** distribution.** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names** of its contributors may be used to endorse or promote products derived** from this software without specific prior written permission.****** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."**** $QT_END_LICENSE$******************************************************************************/#include <QtWidgets>#include "mainwindow.h"MainWindow::MainWindow(){ createActions(); createMenus(); centralWidget = new FormExtractor(this); setCentralWidget(centralWidget); setUnifiedTitleAndToolBarOnMac(true);}void MainWindow::createActions(){ exitAct = new QAction(tr("E&xit"), this); exitAct->setStatusTip(tr("Exit the application")); exitAct->setShortcuts(QKeySequence::Quit); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); aboutAct = new QAction(tr("&About"), this); aboutAct->setStatusTip(tr("Show the application's About box")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutQtAct = new QAction(tr("About &Qt"), this); aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));}void MainWindow::createMenus(){ fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(exitAct); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct);}void MainWindow::about(){ QMessageBox::about(this, tr("About Form Extractor"), tr("The <b>Form Extractor</b> example demonstrates how to " "extract data from a web form using QtWebKit."));}
核心交互类:
/******************************************************************************** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).** Contact: http://www.qt-project.org/legal**** This file is part of the examples of the Qt Toolkit.**** $QT_BEGIN_LICENSE:BSD$** You may use this file under the terms of the BSD license as follows:**** "Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions are** met:** * Redistributions of source code must retain the above copyright** notice, this list of conditions and the following disclaimer.** * Redistributions in binary form must reproduce the above copyright** notice, this list of conditions and the following disclaimer in** the documentation and/or other materials provided with the** distribution.** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names** of its contributors may be used to endorse or promote products derived** from this software without specific prior written permission.****** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."**** $QT_END_LICENSE$******************************************************************************/#ifndef FORMEXTRACTOR_H#define FORMEXTRACTOR_H#include <QtWidgets/QWidget>#include <QWebFrame>#include "ui_formextractor.h"class FormExtractor : public QWidget{ Q_OBJECTpublic: FormExtractor(QWidget *parent = 0, Qt::WindowFlags flags = 0); ~FormExtractor();public slots: void submit(); void populateJavaScriptWindowObject();private: Ui::Form ui;};#endif // FORMEXTRACTOR_H
/******************************************************************************** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).** Contact: http://www.qt-project.org/legal**** This file is part of the examples of the Qt Toolkit.**** $QT_BEGIN_LICENSE:BSD$** You may use this file under the terms of the BSD license as follows:**** "Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions are** met:** * Redistributions of source code must retain the above copyright** notice, this list of conditions and the following disclaimer.** * Redistributions in binary form must reproduce the above copyright** notice, this list of conditions and the following disclaimer in** the documentation and/or other materials provided with the** distribution.** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names** of its contributors may be used to endorse or promote products derived** from this software without specific prior written permission.****** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."**** $QT_END_LICENSE$******************************************************************************/#include "formextractor.h"#include <QWebElement>FormExtractor::FormExtractor(QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags){ ui.setupUi(this); ui.webView->setUrl(QUrl("qrc:/form.html")); connect(ui.webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(populateJavaScriptWindowObject())); resize(300, 300);}FormExtractor::~FormExtractor(){}void FormExtractor::submit(){ QWebFrame *frame = ui.webView->page()->mainFrame(); QWebElement firstName = frame->findFirstElement("#firstname"); QWebElement lastName = frame->findFirstElement("#lastname"); QWebElement maleGender = frame->findFirstElement("#genderMale"); QWebElement femaleGender = frame->findFirstElement("#genderFemale"); QWebElement updates = frame->findFirstElement("#updates"); ui.firstNameEdit->setText(firstName.evaluateJavaScript("this.value").toString()); ui.lastNameEdit->setText(lastName.evaluateJavaScript("this.value").toString()); if (maleGender.evaluateJavaScript("this.checked").toBool()) ui.genderEdit->setText(maleGender.evaluateJavaScript("this.value").toString()); else if (femaleGender.evaluateJavaScript("this.checked").toBool()) ui.genderEdit->setText(femaleGender.evaluateJavaScript("this.value").toString()); if (updates.evaluateJavaScript("this.checked").toBool()) ui.updatesEdit->setText("Yes"); else ui.updatesEdit->setText("No");}void FormExtractor::populateJavaScriptWindowObject(){ ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);}
HTML页面:
<html><body><h1>The Green People Book Club</h1><p>Welcome to The Green People Book Club. Please register to obtain a membership with us.</p> <form onsubmit="formExtractor.submit()"> <table> <tbody><tr> <td> First name: </td> <td> <input type="text" id="firstname"> </td> </tr> <tr> <td> Last name: </td> <td> <input type="text" id="lastname"> </td> </tr> <tr> <td> Gender: </td> <td> <input type="radio" name="gender" id="genderMale" value="Male"> Male <input type="radio" name="gender" id="genderFemale" value="Female"> Female </td> </tr> <tr> <td colspan="2"> <input type="checkbox" id="updates" value="receive"> Check here if you would like to receive regular updates from us: </td> </tr> </tbody></table> <input type="submit" value="Submit"> </form></body></html>其中关键就是:
<form onsubmit="formExtractor.submit()">
ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this);
void QWebFrame::addToJavaScriptWindowObject(const QString & name, QObject * object, ValueOwnership own = QtOwnership);
作用就是讲处理对象object作为html的window对象的javascript子对象,这样就相当于在html页面中添加了相应的javascript处理函数,实现了交互功能!
0 0
- QT源码阅读——QT与HTML交互编程
- QT通过JS与HTML的交互
- qt 调用百度api 之 Qt 与 Html交互
- QT——与 Javascript 交互
- QT源码阅读 -- QTimer
- QT与JaveScript 交互
- Qt与HTML,jQuery交互实现类似QQ聊天界面
- QT程序与html交互(一)------QWebEngineView类
- QT程序与html交互(二)------QWebChannel类
- QT程序与html交互(三)------QT WebChannel JavaScript API
- 跨平台编程的利器—Qt:与Javascript的交互(为程序添加动态脚本)
- QML, Qt C++混合编程--QML与Qt C++ 交互机制探讨与总结
- QT 与 网页的交互
- JS与Qt对象交互
- Qt WebKit与JavaScript交互
- JS与Qt对象交互
- QT 与webkit(wke) 交互
- html结合qt混合ui交互架构
- Redis AE 异步事件模块
- Android之Handler用法总结
- 利用CSS使DOM元素居中
- 开发后期在各个页面中添加友盟统计
- 关于大数的操作
- QT源码阅读——QT与HTML交互编程
- SharedPreferences的基本使用及其封装类SPUtils剖析
- Fast R-CNN
- 5.4.4 关键路径
- Dual Band Wireless-AC 3165无线驱动无法开启wifi
- 为mysql master主机新建一slave并监控slave一致性
- mysql将死锁信息记录到error log
- 连接池 commons-dbcp2-2.1.1使用
- 关于时间格式问题