C++ Qt自建网页浏览器
C++ Qt自建网页浏览器
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
前言
这篇博客针对<<C++ Qt自建网页浏览器>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
文章目录
一、所需工具软件
二、使用步骤
1. 引入库
2. 窗体界面
3. 运行结果
三、在线协助
一、所需工具软件
1. VS, Qt
2. Win10, Win11
二、使用步骤
1.引入库
代码如下(示例):
#include "QUrl"
#include <iostream>
#include<string>
#include<QKeyEvent>
#include<QFontDatabase>
#include<QWebEngineSettings>
#include<QWebEngineCookieStore>
2.窗体界面
代码如下(示例):
QT_BEGIN_NAMESPACEclass Ui_MainWindowClass
{
public:QAction *actionaa;QWidget *centralWidget;QGridLayout *gridLayout_3;QFrame *frame_2;QGridLayout *gridLayout_2;QComboBox *comboBox;QHBoxLayout *horizontalLayout;QPushButton *pushButton_4;QPushButton *pushButton_3;QPushButton *pushButton_2;QLineEdit *lineEdit;QPushButton *pushButton;QPushButton *pushButton_5;QPushButton *pushButton_6;QSpacerItem *horizontalSpacer;QSpacerItem *horizontalSpacer_2;QLabel *label;QFrame *frame;QGridLayout *gridLayout;QWebEngineView *webEngineView;QMenuBar *menuBar;QToolBar *mainToolBar;QStatusBar *statusBar;void setupUi(QMainWindow *MainWindowClass){if (MainWindowClass->objectName().isEmpty())MainWindowClass->setObjectName(QString::fromUtf8("MainWindowClass"));MainWindowClass->resize(716, 400);actionaa = new QAction(MainWindowClass);actionaa->setObjectName(QString::fromUtf8("actionaa"));QIcon icon;QString iconThemeName = QString::fromUtf8("dfds");if (QIcon::hasThemeIcon(iconThemeName)) {icon = QIcon::fromTheme(iconThemeName);} else {icon.addFile(QString::fromUtf8(":/MainWindow/png/\346\211\223\345\274\200\346\226\207\344\273\266\345\244\271-\347\272\242\350\211\262.png"), QSize(), QIcon::Normal, QIcon::Off);}actionaa->setIcon(icon);centralWidget = new QWidget(MainWindowClass);centralWidget->setObjectName(QString::fromUtf8("centralWidget"));gridLayout_3 = new QGridLayout(centralWidget);gridLayout_3->setSpacing(6);gridLayout_3->setContentsMargins(11, 11, 11, 11);gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));frame_2 = new QFrame(centralWidget);frame_2->setObjectName(QString::fromUtf8("frame_2"));QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);sizePolicy.setHorizontalStretch(1);sizePolicy.setVerticalStretch(0);sizePolicy.setHeightForWidth(frame_2->sizePolicy().hasHeightForWidth());frame_2->setSizePolicy(sizePolicy);QFont font;font.setFamily(QString::fromUtf8("3ds"));font.setPointSize(16);frame_2->setFont(font);frame_2->setFrameShape(QFrame::Box);frame_2->setFrameShadow(QFrame::Raised);gridLayout_2 = new QGridLayout(frame_2);gridLayout_2->setSpacing(6);gridLayout_2->setContentsMargins(11, 11, 11, 11);gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));comboBox = new QComboBox(frame_2);comboBox->addItem(QString());comboBox->addItem(QString());comboBox->addItem(QString());comboBox->setObjectName(QString::fromUtf8("comboBox"));QFont font1;font1.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));font1.setPointSize(12);comboBox->setFont(font1);gridLayout_2->addWidget(comboBox, 0, 2, 1, 1);horizontalLayout = new QHBoxLayout();horizontalLayout->setSpacing(6);horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));pushButton_4 = new QPushButton(frame_2);pushButton_4->setObjectName(QString::fromUtf8("pushButton_4"));horizontalLayout->addWidget(pushButton_4);pushButton_3 = new QPushButton(frame_2);pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));horizontalLayout->addWidget(pushButton_3);pushButton_2 = new QPushButton(frame_2);pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));horizontalLayout->addWidget(pushButton_2);lineEdit = new QLineEdit(frame_2);lineEdit->setObjectName(QString::fromUtf8("lineEdit"));QFont font2;font2.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));lineEdit->setFont(font2);horizontalLayout->addWidget(lineEdit);pushButton = new QPushButton(frame_2);pushButton->setObjectName(QString::fromUtf8("pushButton"));QFont font3;font3.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));font3.setPointSize(16);pushButton->setFont(font3);horizontalLayout->addWidget(pushButton);pushButton_5 = new QPushButton(frame_2);pushButton_5->setObjectName(QString::fromUtf8("pushButton_5"));pushButton_5->setFont(font2);horizontalLayout->addWidget(pushButton_5);pushButton_6 = new QPushButton(frame_2);pushButton_6->setObjectName(QString::fromUtf8("pushButton_6"));pushButton_6->setFont(font2);horizontalLayout->addWidget(pushButton_6);horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);horizontalLayout->addItem(horizontalSpacer);gridLayout_2->addLayout(horizontalLayout, 0, 0, 1, 1);horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);gridLayout_2->addItem(horizontalSpacer_2, 0, 1, 1, 1);label = new QLabel(frame_2);label->setObjectName(QString::fromUtf8("label"));label->setFont(font2);gridLayout_2->addWidget(label, 0, 3, 1, 1);gridLayout_3->addWidget(frame_2, 0, 0, 1, 1);frame = new QFrame(centralWidget);frame->setObjectName(QString::fromUtf8("frame"));QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Preferred);sizePolicy1.setHorizontalStretch(0);sizePolicy1.setVerticalStretch(6);sizePolicy1.setHeightForWidth(frame->sizePolicy().hasHeightForWidth());frame->setSizePolicy(sizePolicy1);frame->setFrameShape(QFrame::Box);frame->setFrameShadow(QFrame::Raised);gridLayout = new QGridLayout(frame);gridLayout->setSpacing(5);gridLayout->setContentsMargins(11, 11, 11, 11);gridLayout->setObjectName(QString::fromUtf8("gridLayout"));gridLayout->setContentsMargins(0, 0, 0, 0);webEngineView = new QWebEngineView(frame);webEngineView->setObjectName(QString::fromUtf8("webEngineView"));webEngineView->setUrl(QUrl(QString::fromUtf8("about:blank")));gridLayout->addWidget(webEngineView, 0, 0, 1, 1);gridLayout_3->addWidget(frame, 1, 0, 1, 1);mainToolBar->addAction(actionaa);mainToolBar->addSeparator();retranslateUi(MainWindowClass);QMetaObject::connectSlotsByName(MainWindowClass);} // setupUivoid retranslateUi(QMainWindow *MainWindowClass){MainWindowClass->setWindowTitle(QCoreApplication::translate("MainWindowClass", "MainWindow", nullptr));actionaa->setText(QCoreApplication::translate("MainWindowClass", "aa", nullptr));
#if QT_CONFIG(shortcut)actionaa->setShortcut(QCoreApplication::translate("MainWindowClass", "Ctrl+O", nullptr));
#endif // QT_CONFIG(shortcut)comboBox->setItemText(0, QString());comboBox->setItemText(1, QCoreApplication::translate("MainWindowClass", "www.baidu.com", nullptr));comboBox->setItemText(2, QCoreApplication::translate("MainWindowClass", "www.csdn.net", nullptr));};namespace Ui {class MainWindowClass: public Ui_MainWindowClass {};
} // namespace UiQT_END_NAMESPACE#endif // UI_MAINWINDOW_H

3.运行结果如下

三、在线协助:
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作
博主推荐文章:https://blog.csdn.net/alicema1111/article/details/123851014
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog
相关文章:
C++ Qt自建网页浏览器
C Qt自建网页浏览器如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<C Qt自建网页浏览器>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。文…...
Flink从入门到精通系列(四)
5、DataStream API(基础篇) Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由于新版本已经实现了流批一体,DataSet API 将被弃用,官方推荐统一使用 DataStream API 处理流数据和批数据。…...
Nginx 配置实例-反向代理案例一
实现效果:使用nginx反向代理,访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…...
为什么北欧的顶级程序员数量远超中国?
说起北欧,很多人会想到寒冷的冬天,漫长的极夜,童话王国和圣诞老人,但是如果我罗列下诞生于北欧的计算机技术,恐怕你会惊掉下巴。Linux:世界上最流行的开源操作系统,最早的内核由Linus Torvalds开…...
vuex getters的作用和使用(求平均年龄),以及辅助函数mapGetters
getters作用:派生状态数据mapGetters作用:映射getters中的数据使用:方法名自定义,系统自动注入参数:state,每一个方法中必须有return,其return的结果被该方法名所接收。在state中声明数据listst…...
20230311给Ubuntu18.04下的GTX1080M安装驱动
20230311给Ubuntu18.04下的GTX1080M安装驱动 2023/3/11 12:50 2. 安装GTX1080驱动 安装 Nvidia 驱动 367.27 sudo add-apt-repository ppa:graphics-drivers/ppa 第一次运行出现如下的警告: Fresh drivers from upstream, currently shipping Nvidia. ## Curren…...
2023腾讯面试真题:
【腾讯】面试真题: 1、Kafka 是什么?主要应用场景有哪些? Kafka 是一个分布式流式处理平台。这到底是什么意思呢? 流平台具有三个关键功能: 消息队列:发布和订阅消息流,这个功能类似于消息…...
23种设计模式-建造者模式(Android应用场景介绍)
什么是建造者模式 建造者模式是一种创建型设计模式,它允许您使用相同的创建过程来生成不同类型和表示的对象。在本文中,我们将深入探讨建造者模式的Java实现,并通过一个例子来解释其工作原理。我们还将探讨如何在Android应用程序中使用建造者…...
English Learning - L2 语音作业打卡 双元音 [ʊə] [eə] Day17 2023.3.9 周四
English Learning - L2 语音作业打卡 双元音 [ʊə] [eə] Day17 2023.3.9 周四💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [ʊə…...
【动态规划】多重背包问题,分组背包问题
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
JAVA面向对象特征之——封装
4.封装 private关键字 是一个权限修饰符 可以修饰成员(成员变量和成员方法) 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作 提供 “get变量名()…...
【数据结构】二叉树相关OJ题
文章目录一、单值二叉树二、检查两颗树是否相同三、判断一棵树是否为另一颗树的子树四、对称二叉树五、二叉树的前序遍历六、二叉树中序遍历七、二叉树的后序遍历八、二叉树的构建及遍历一、单值二叉树 单值二叉树 题目描述 如果二叉树每个节点都具有相同的值,那…...
Windows安装Hadoop
当初搭建Hadoop、Hive、HBase、Flink等这些没有截图写文,今为分享特重装。下载Hadoop下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/以管理员身份运行cmd切换到所在目录执行start winrar x -y hadoop-3.3.4.tar.gz,解压。配置…...
ICG-Hydrazide,吲哚菁绿-酰肼,ICG-HZ结构式,溶于二氯甲烷等部分有机溶剂,
ICG-Hydrazide,吲哚菁绿-酰肼 中文名称:吲哚菁绿-酰肼 英文名称:ICG-Hydrazide 英文别名:ICG-HZ 性状:粉末或固体 溶剂:溶于二氯甲烷等部分有机溶剂 稳定性:-20℃密封保存、置阴凉干燥处、防潮 分子…...
【论文阅读】浏览器扩展危害-Helping or Hindering? How Browser Extensions Undermine Security
本文来源于ACM CCS 2022; https://dl.acm.org/doi/10.1145/3548606.3560685 摘要 “浏览器扩展”是轻量级的浏览器附加组件,使用各个浏览器特定的功能丰富的JavaScript api,为用户提供了额外的Web客户端功能,如改进网站外观和与…...
线性和非线性最小二乘问题的常见解法总结
线性和非线性最小二乘问题的各种解法 先看这篇博客,非常好:线性和非线性最小二乘问题的各种解法 1. 线性最小二乘问题有最优解 但是面对大型稀疏矩阵的时候使用迭代法效率更好。 迭代法 有Jacobi迭代法、 Seidel迭代法及Sor法 【数值分析】Jacobi、Se…...
数据库知识点
数据库是指按照一定规则存储、组织和管理数据的系统。在现代化的信息化社会中,数据库已经成为了各种应用系统中不可或缺的一部分。因此,对于数据库的知识掌握不仅是计算机专业人员必备的技能,也是各个行业从业者必须具备的基本素质之一。 数…...
Maven打包构建Docker镜像并推送到仓库
Maven打包构建Docker镜像并推送到仓库 文章目录Maven打包构建Docker镜像并推送到仓库一,服务器Docker配置二,本地项目maven配置2.1 pom.xml2.2 dockerfile2.3 验证2.4 统一dockerfile对于开发完成的服务要发布至服务器Docker时,我刚学习了解D…...
TypeScript 基础学习之泛型和 extends 关键字
越来越多的团队开始使用 TS 写工程项目, TS 的优缺点也不在此赘述,相信大家都听的很多了。平时对 TS 说了解,仔细思考了解的也不深,借机重新看了 TS 文档,边学习边分享,提升对 TS 的认知的同时,…...
《数据分析-JiMuReport04》JiMuReport报表设计入门介绍-页面优化
报表设计 2 页面优化 如上图所示的报表,仅仅是展示数据,不过这样看起来似乎太草率了,所以再优化一下吧 保存报表后,在积木报表中就可以看到对应的报表文件 此时我们如果还需要编辑报表,就点击这个报表即可 2.1 居中…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
