第40篇 网络(十)WebKit初识

news2024/11/30 10:36:54

导语

WebKit是一个开源的浏览器引擎。Qt中提供了基于WebKit的QtWebKit模块,它包含了一组相关的类。QtWebKit提供了一个Web浏览器引擎,使用它便可以很容易的将万维网(WorldWide Web)中的内容嵌入到Qt应用程序中。与此同时,本地也可以对Web内容进行控制。QtWebKit可以呈现HTML(HyperTextMarkup Language,超文本标记语言)文档、XHTML(Extensible HyperTextMarkup Language,可扩展超文本标记语言)文档和SVG(Scalable VectorGraphics,可缩放矢量图形)文档,风格使用CSS(Cascading StyleSheets,层叠样式表),脚本使用JavaScript。在JavaScript执行环境和Qt对象模型间搭建的桥梁,实现了使用WebKit的JavaScript环境访问本地对象。关于这一点,大家可以在帮助中参考The QtWebKit Bridge关键字对应的文档。通过整合Qt的网络模块,实现了从Web服务器、本地文件系统甚至Qt资源系统中透明的加载Web页面。

环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0

目录

  • 一、简单应用
  • 二、扩展应用

正文

一、简单应用

下面我们来实现一个可以打开特定网页的程序。新建空的Qt项目,在pro项目文件中添加一行代码:QT += webkit,然后向项目中添加一个main.cpp文件,并在其中添加如下代码:

#include <QWebView>
#include <QApplication>
int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    QWebView view;
    view.load(QUrl("http://www.qter.org"));
    view.show();
    return a.exec();
}

要使用WebKit,就要先添加webkit模块。QWebViewQtWebKit模块主要的窗体部件,它可以在各种应用程序中用来显示Internet上的网页内容。QWebView作为一个窗口部件,可以嵌入到窗体或者图形视图部件中。

QWebView用来显示Web页面,每个QWebView实例都包含一个QWebPage对象。QWebPage提供了对一个页面的文档结构的访问,描述了如框架(frame)、访问历史记录和可编辑内容的撤销/重做栈等特色。每一个QWebPage都包含一个QWebFrame对象作为它的主框架。在HTML中的每一个单独的框架都可以使用QWebFrame来表示,这个类包含了到JavaScript窗口对象的桥梁,而且可以进行绘制。在QWebPage的主框架中可以包含很多的子框架。

HTML文档中单独的元素可以通过DOM JavaScript接口进行访问,在QtWebKit中与这个接口等价的接口由QWebElement来表示。QWebElement对象可以使用QWebFrame的findAllElement()findFirstElement()函数来获取。一般的网页浏览器的特色设置都可以通过QWebSettings类来配置,可以通过默认设置为所有的QWebPage实例提供默认值。单独的属性可以使用页面指定的设置对象进行重写。

二、扩展应用

下面再来看一个可以随意更改网址并且可以显示网站logo的例子。新建Qt Gui应用,项目名称为webview,类名和基类保持MainWindowQMainWindow不变。完成后向webview.pro文件中添加QT += webkit一行代码,并按下Ctrl + S保存该文件。

1.下面到mainwindow.h文件中,先添加头文件:

#include <QWebView>
#include <QLineEdit>

然后添加槽的声明:

protected slots:
    void changeLocation();     // 改变路径
    void setProgress(int);     // 更新进度
    void adjustTitle();        // 更新标题显示
void finishLoading(bool);  // 加载完成后进行处理
       再添加对象和变量定义:
QWebView *view;
QLineEdit *locationEdit;
int progress;

2.下面到mainwindow.cpp文件中,在构造函数中添加如下代码:

progress = 0;
view = new QWebView(this);
setCentralWidget(view);
resize(800, 600);

// 关联信号和槽
connect(view, SIGNAL(loadProgress(int)), this, SLOT(setProgress(int)));
connect(view, SIGNAL(titleChanged(QString)), this, SLOT(adjustTitle()));
connect(view, SIGNAL(loadFinished(bool)), this, SLOT(finishLoading(bool)));
locationEdit = new QLineEdit(this);
connect(locationEdit, SIGNAL(returnPressed()), this, SLOT(changeLocation()));

// 向工具栏添加动作和部件
ui->mainToolBar->addAction(view->pageAction(QWebPage::Back));
ui->mainToolBar->addAction(view->pageAction(QWebPage::Forward));
ui->mainToolBar->addAction(view->pageAction(QWebPage::Reload));
ui->mainToolBar->addAction(view->pageAction(QWebPage::Stop));
ui->mainToolBar->addWidget(locationEdit);

// 设置并加载初始网页地址
locationEdit->setText("http://www.baidu.com");
view->load(QUrl("http://www.baidu.com"));

QWebView开始加载时,会发射loadStarted()信号;而每当一个网页元素(例如一张图片或一个脚本等)加载完成时,都会发射loadProgress()信号;最后,当加载全部完成后,会发射loadFinished()信号,如果加载成功,该函数的参数为true,否则为false。可以使用title()来获取HTML文档的标题,如果标题发生了改变,将会发射titleChanged()信号。

3.下面添加那几个槽的定义:

void MainWindow::changeLocation()
{
    QUrl url = QUrl(locationEdit->text());
    view->load(url);
    view->setFocus();
}
void MainWindow::setProgress(int p)
{
    progress = p;
    adjustTitle();
}
void MainWindow::adjustTitle()
{
    if ( progress <= 0 || progress >= 100) {
       setWindowTitle(view->title());
    } else {
setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress));
    }
}
void MainWindow::finishLoading(bool finished)
{
    if (finished) {
       progress = 100;
       setWindowTitle(view->title());
    } else {
       setWindowTitle("web page loading error!");
    }
}

下面运行程序,效果如下图所示:

结语

WebKit是一个很庞大的体系,我们这里只是讲解了其最基本的应用,有兴趣的朋友可以结合Qt文档来进一步的学习。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大二Web课程设计——基于HTML+CSS+JavaScript+jquery手表商城购物网站(17页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

无人机集群的分布式协作 VI-SLAM

以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# D2SLAM: Decentralized and Distributed Collaborative Visual-inertial SLAM System for Aerial Swarm 论文地址&#xff1a;https://arxiv.org/abs/2211.01538…

视频怎么转文字?快把这些方法收好

如今短视频让知识传播变得越来越简单&#xff0c;我们可以很轻松的就通过短视频了解到大量的知识要点。但是当我们想要回温知识点的时候&#xff0c;需要重新观看视频&#xff0c;这就有些不太便利。其实我们可以通过将视频转成文字&#xff0c;这样子就容易归纳知识点了。那你…

Jlink commander使用方法(附指令大全)

Jlinkcmd它可以方便用户在非仿真的情况下&#xff0c;hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等&#xff0c;方便大家拥有最高的权限查看在运行中的MCU情况&#xff0c;查找非IDE仿真情况下&#xff0c;MCU运行异常的原因。 目录 驱动安装 …

粉笔科技张小龙:能传授知识文化和技能,就是对社会的贡献和交代

粉笔科技张小龙在一次粉笔科技的管培生大会上强调&#xff0c;今天是互联网时代&#xff0c;你只有为别人提供价值&#xff0c;提供更高品质的价值&#xff0c;以及更高效率的提供价值&#xff0c;你才有价值。一个企业是这样&#xff0c;一个人也是这样。#张小龙# 你把事情做到…

微服务框架 SpringCloud微服务架构 分布式缓存 42 Redis 主从 42.4 数据同步原理【优化】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式缓存 文章目录微服务框架分布式缓存42 Redis 主从42.4 数据同步原理【优化】42.4.1 主从同步的问题优化42.4.2 总结42 Redis 主从 42…

QA | SWCF2022 笔记:C波段卫星与5G之间的干扰排查及解决方案

2022年度SWCF卫星通信与仿真测试研讨会正在进行中。昨日精彩演讲&#xff1a;C波段卫星与5G之间的干扰排查及解决方案&#xff0c;昨晚收到一些粉丝的技术问题&#xff0c;我们汇总了热点问题并请讲师详细解答。 演讲主题&#xff1a;C波段卫星与5G之间的干扰排查及解决方案 干…

龙芯内核的UOS安装 Mariadb-server

1.安装 Mariadb-server 1.1安装配置 sudo apt install mariadb-server启动数据库 systemctl start mariadb;设置数据库自启动 systemctl enable mariadb;对数据库进行一些设置 mysql_secure_installation输入当前密码&#xff08;因为是第一次安装&#xff0c;没有密码&am…

基于Android的应用市场软件的设计

基于Android的应用市场软件的设计 摘  要 随着智能手机的普及&#xff0c;人们越来越依赖手机进行一系列操作。 由于Android系统是一款免费的操作系统&#xff0c;导致了使用Android系统的手机占到7成左右。为了让Android手机用户体验更好&#xff0c;就需要让Android手机用…

【linux】之私有云OpenStack手动分布式部署

一、环境准备 参考: https://docs.openstack.org/zh_CN/install-guide/ 1, 静态IP(NetworkManager服务可以关闭) 2,主机名与绑定 192.168.122.11 controller 192.168.122.12 compute 192.168.122.13 cinder3, 关闭防火墙和selinux 4, 时间同步 所有节点准备yum源 # yum …

12.6、后渗透测试--Windows系统下信息收集模块

一、存活主机发现 步骤1、使用arp查看缓冲表&#xff1a;meterpreter > arp步骤2、局域网内存活主机发现&#xff1a;meterpreter > run post/windows/gather/arp_scanner RHOSTS172.16.0.0/24二、应用程序枚举 方法1&#xff1a; 获取靶机上的软件安装信息meterpreter…

免费刷题的软件测试面试题库小程序,萌新必备

现如今&#xff0c;不仅学习卷、考证卷&#xff0c;就连找工作也开始卷得没边了。就如最近几年新崛起的软件测试岗位&#xff0c;很多人为了能过快速通过面试&#xff0c;或者拿到offer&#xff0c;纷纷在面试前几周左右&#xff0c;不惜花重金&#xff0c;购买面试题目&#x…

【总结】有三AI所有原创GAN相关的学习资料汇总(2022年12月)

GAN的研究和应用在这几年发展可以说是非常迅猛&#xff0c;无疑是这几年深度学习计算机视觉领域里落地性最酷的技术之一&#xff0c;包括图像与视频生成&#xff0c;数据仿真与增强&#xff0c;各种各样的图像风格化任务&#xff0c;人脸与人体图像编辑&#xff0c;图像质量提升…

高分子PEGDBCO-PEG-Acrylates,DBCO-PEG-ACRL,二苯并环辛炔PEG丙烯酸酯

●外观以及性质&#xff1a; DBCO-PEG-ACRL产物呈固体或粘性液体&#xff0c;取决于PEG分子量“点击化学"一般由叠氮化物&#xff08;azide&#xff09;和炔烃&#xff08;alkyne&#xff09;作用形共价键&#xff0c;具有高效稳定&#xff0c;高特异性等优点。反应不受PH…

【Vue 快速入门系列】Vue中如何使用动画与过渡

文章目录前言一、回忆css3中的动画二、Vue中单标签使用动画1.默认使用方法2.自定义使用方法三、Vue中多标签实现动画效果四、使用第三方动画前言 本篇博客将会介绍如何在Vue中使用动画效果。 一、回忆css3中的动画 定义一个动画&#xff1a; 定义一个动画名为atguigu keyfr…

WhatWeb 网站指纹识别软件

一、WhatWeb介绍 WhatWeb是一个开源的网站指纹识别软件。WhatWeb识别网站。它的目标是回答“那个网站是什么&#xff1f;”这个问题。WhatWeb可识别Web技术&#xff0c;包括内容管理系统&#xff08;CMS&#xff09;&#xff0c;博客平台&#xff0c;统计/分析包&#xff0c;Ja…

数据库原理及MySQL应用 | 数据库安全加固

数据库安全至关重要&#xff0c;可从多方面对数据库进行加固。 数据库安全怎么强调都不过分&#xff0c;可以从以下方面对数据库进行加固&#xff0c;让它更安全。 01、操作系统级别 可从以下七方面实现操作系统级别的安全加固。 1. 使用数据库专用服务器 使用专用的服务器…

《大数据导论》之数据生命周期和数据使用

1 数据生命周期 数据都存在一个生命周期&#xff0c;数据生命周期是指数据从创建、修改、发布利用到归档/销毁的整个过程。 1.1 数据生命周期管理工作包括以下几个方面&#xff1a; 分类&#xff1a;对数据进行自动分类&#xff0c;分离出有效的数据&#xff0c;对不同类型数据…

【MySQL】数据库基础知识汇总和增删改查操作

【MySQL】数据库基础知识汇总和增删查改操作 文章目录【MySQL】数据库基础知识汇总和增删查改操作1.数据库基础知识:2.对数据库的相关操作:2.1.显示当前所有的数据库, show databases;2.2.创建数据库, create database 数据库名;2.3.选中数据库, use 数据库名;2.4.删除数据库, …

基于腾讯云的艺术展小程序

第一章 项目背景 1.1 项目简介和应用现状 基于腾讯云的艺术展小程序&#xff1a;打造集美术鉴赏、艺术科普、当代优秀艺术品交流多功能融艺术性、知识性、趣味性、便利性于一体的一站式平台&#xff0c;为广大艺术爱好者提供优质服务&#xff01;小程序前后端完整&#xff0c…