日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-官方Form Extractor Example实例解析

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-官方Form Extractor Example实例解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

?

背景

解析官方例子


?

背景

最近迷上了WEB相關的代碼,上個月初步分析了HTTP協議,能用telnet構造HTTP封包直接和WEB服務器通信,昨天晚上看到了Qt5.5.1版本里面有一個例子Form Extractor Example,這個例子簡直刷新了我對Qt的認識!

原來在官方認為:

不僅僅可以用widges做界面,Qt后端數據處理;

QML做界面,Qt后端處理。

竟然還能用HTML做界面,Qt后端處理,在此把Form Extractor Example這個實例給分析一下!

?

解析官方例子

這里先放一個截圖:

首先來看看文件的存儲結構:

進formextractor.ui看看

發現這是一個QWidget界面,而在程序跑起來后,竟然有菜單欄!

這里,看看mainwindw.h,發現這個是QMainWindow,再看下mainwindow.cpp發現他構造了一個界面,然后把QWidget界面,放到了setCentralWidget里面!

這里就有了一個疑惑,為什么官方不直接把界面放到QMainwindw里面,而是先放到QWidget,再放進去呢?

這葫蘆里到底是賣的什么藥?????

因為這個例子,官方沒有給其他說明,所以,在此我就猜測下!

估計是為了方便管理把,主控界面放到主控界面的UI里面,程序大體框架,放到大體框架里面,估計就是這樣了把!

下面來看下:

formextractor.cpp代碼:

#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");elseui.updatesEdit->setText("No"); }void FormExtractor::populateJavaScriptWindowObject() {ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor", this); }

從這里我們可以知道:

當頁面聲明了JavaScript后,就會發出信號,嗲用populxxxxxxx這個函數!

這里有2個疑惑,一個是:

點擊了界面的Submit后,才會進入populxxxxxxx,并不是加載頁面后,就進入這個函數,這里估計可以知道,當點擊了Submit后,才有JavaScript的聲明,

下面來看下html代碼:

form.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>

這里也沒明顯的看到JavaScript代碼!表單里面也沒有說什么Post,Get方法啥的

我估計就是這個原因把:

最后看一下這個函數:

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");elseui.updatesEdit->setText("No"); }

從中,可以知道,通過QWebElement可以直接獲取html中填充的數據!

簡直是神器啊!

?

總結

以上是生活随笔為你收集整理的Qt文档阅读笔记-官方Form Extractor Example实例解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 熟妇人妻av无码一区二区三区 | 国产在线你懂得 | 日日免费视频 | 日本理论片午伦夜理片在线观看 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 日本在线观看a | 欧美激情第1页 | 日韩一级黄色 | 亚洲精品tv | 日韩在线观看免费 | 亚洲国产视频在线观看 | 黄色片免费在线观看 | 中文字幕15页 | 国产婷婷一区二区三区 | 日韩欧美综合一区 | 蜜桃91麻豆精品一二三区 | 999精品视频在线观看 | 美女免费福利视频 | 在线观看国产三级 | 有码在线播放 | 欧美日韩成人一区二区在线观看 | 国产精品日韩精品欧美精品 | 自拍偷拍亚洲视频 | 九一成人网| 国产精品爽爽久久久久久 | 日本精品一区二区三区视频 | 潮喷失禁大喷水无码 | 国产精品高潮呻吟久久久 | 91精品区| 日韩精品视频在线观看免费 | 91精品国产麻豆国产自产在线 | 182tv福利视频 | 欧美巨大另类极品videosbest | 日韩人妻无码精品久久久不卡 | a级一级黄色片 | 超碰超碰在线 | 依人99| 天堂新版8中文在线8 | 国产精选自拍 | 亚欧洲精品视频在线观看 | 色欲av无码精品一区 | 狼人狠狠干| 一女三黑人理论片在线 | 国产日韩欧美精品 | 亚洲hhh | 日本aa在线观看 | 欧美午夜网站 | 亚欧成人精品一区二区 | 91美女视频在线观看 | 国内精品一区二区三区 | 亚洲丝袜色图 | 性欧美ⅹxxxx极品护士 | 欧美色综合色 | 国产成人精品一区二区三区视频 | 国产精品久久久久久久久免费桃花 | 成人一区av| 黑人玩弄人妻一区二区绿帽子 | 在线观看99| 青青草国产在线观看 | 白白色在线观看 | 亚洲福利电影 | 国产中文一区二区 | 寂寞人妻瑜伽被教练日 | 国产五十路 | 在线免费观看国产视频 | va视频在线 | 妺妺窝人体色www聚色窝仙踪 | 91在线免费看片 | 欧美色综合色 | 久久婷婷网 | 嫩草嫩草嫩草嫩草 | 五月婷婷激情综合 | 999精品| 欧美一区二区三区视频在线 | 在线观看欧美精品 | 欧美激情在线免费观看 | 欧美日韩精品在线 | 免费观看一区二区三区 | 又粗又猛又爽又黄的视频 | 日本在线视频二区 | www.五月婷婷.com | av免费播放网站 | 伊人影音| 伊人网站在线观看 | 体内精视频xxxxx | 91免费国产在线观看 | 日韩av在线中文字幕 | 尤物在线观看 | 榴莲视频黄色 | 蜜桃av在线 | 国产亚洲精品成人a | 午夜激情在线观看视频 | 新av在线 | 理论片午夜 | 欧洲国产视频 | 毛片在线视频播放 | 无码人妻aⅴ一区二区三区玉蒲团 | 少妇一级淫片免费观看 | 日韩成人av网 |