日韩性视频-久久久蜜桃-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网站 | 精品在线免费播放 | 色哟哟免费| 亚洲狠狠爱 | 亚洲天堂男人的天堂 | 精品国产伦一区二区三区 | 久久久精品人妻一区二区三区色秀 | 国产亚洲精品精品国产亚洲综合 | 老湿影院av | 91精品又粗又猛又爽 | 苍井空张开腿实干12次 | 国产精品一区二区三区久久 | 日韩偷拍一区 | 台湾佬中文在线 | 日韩一级免费视频 | 天堂中文字幕 | 插插看看 | 少妇人妻真实偷人精品视频 | 国产欧美日韩二区 | 欧美日韩高清在线播放 | 青青草视频免费看 | 亚洲精品乱码久久久久久蜜桃欧美 | 一区二区三区免费网站 | 日本在线不卡一区二区 | 国产97免费视频 | 九九日韩 | 日韩婷婷| 99xav| 欧美另类综合 | 亚洲精品久久久久 | 少妇性l交大片7724com | 亚洲精品视频网 | 国产一精品一aⅴ一免费 | 免费在线中文字幕 | 国产一区二区精彩视频 | 青青青视频在线播放 | 中文字幕第20页 | www.成人网.com | 久久伊人网站 | 国产喷白浆一区二区三区 | 亚洲精品一区二区在线 | 中文字幕第九页 | 欧美精品黄色片 | 精品妇女一区二区三区 | 日本在线加勒比 | 九九九九色 | 亚洲三级a | 欧美日韩在线视频免费 | 国产精品一区二区三区免费在线观看 | 1级黄色大片儿 | wwwxx在线观看| 欧洲做受高潮欧美裸体艺术 | 少妇与公做了夜伦理 | 国产日本欧美在线 | 亚洲三级图片 | 大陆av在线播放 | 国产成人精品亚洲男人的天堂 | 18深夜在线观看免费视频 | 欧美激情欧美激情在线五月 | 糖心logo在线观看 | 国产一久久 | 国产毛片av | 成人无遮挡 | 国产综合av | 欧美妞干网 | 91激情 | 久久久久久久黄色片 | 好了av在线| 亚洲精品久久久久久宅男 | 大乳女喂男人吃奶 | 无码人妻一区二区三区精品视频 | 午夜天堂精品久久久久 | 国产欧美综合一区二区三区 | 久久艹国产精品 | 麻豆视频网站在线观看 | 精品熟妇视频一区二区三区 | 久久久久亚洲AV成人网人人小说 | 美女啪啪网址 | 中文字幕区 | 国产欧美a | 国产r级在线 | 久久久久久久久久一级 | 99精品99| 婷婷.com| 99亚洲天堂 | 亚洲理论片在线观看 | 在线观看免费大片 | 久草97 | 日本阿v视频 | 精品人妻无码一区二区三 | 国产精品美女一区二区 | 成人一卡二卡 | 男人天堂亚洲天堂 | www.久久av| 偷偷久久 | 91大片在线观看 | 69xx欧美| 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 黄色的网站免费观看 |