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 居中…...
OpenClaw安全实践:GLM-4.7-Flash本地化部署的权限控制指南
OpenClaw安全实践:GLM-4.7-Flash本地化部署的权限控制指南 1. 为什么需要关注OpenClaw的权限控制? 去年夏天,我在整理电脑上的财务报告时,无意中发现OpenClaw自动将我的税务文件同步到了一个陌生目录。这个意外让我意识到——当…...
石墨烯这玩意儿在COMSOL里折腾起来挺有意思的,特别是搞太赫兹和近红外的同学估计都遇到过选模型的纠结。今天咱们就聊点实战经验,顺便甩点代码片段
Comsol石墨烯二维材料。 包含太赫兹德鲁得和近红外Kubo两种模型。 共7个案例,包含参考文献。先说说太赫兹波段常用的德鲁得模型,这货相当于把石墨烯当经典等离子体处理。在COMSOL里实现时,关键要设置表面电流密度: sigma_drude (…...
等保测评必看!用组策略批量关闭445/139端口(域环境适用版)
企业域环境下批量关闭高危端口的组策略实战指南 在等保测评和日常安全运维中,445、139、135等端口因其历史漏洞和潜在风险,常被列为必须管控的高危端口。对于拥有数百甚至上千台终端的中大型企业来说,逐台手动配置不仅效率低下,更…...
售前客户需求深度挖掘:从表面诉求到核心痛点的五步法
# 003、客户需求深度挖掘:从表面诉求到核心痛点的五步法---上周调一个嵌入式项目,客户说“设备偶尔会死机,重启就好”。我们查了三天的日志,发现是内存泄漏。但真正的问题是什么?是代码质量?不完全是。最后…...
Flink技术实践-超时异常踩坑与优化
一、背景介绍在Flink实时计算的生产环境中,最令人头疼的往往不是复杂的业务逻辑,而是那些突如其来的“超时异常”。这些异常就像是系统中的“幽灵”,通常在业务高峰期或网络抖动时出现,导致作业重启、数据延迟甚至数据丢失。最近几…...
嵌入式开源软件应用的五项关键实践
嵌入式开源软件应用的五项关键实践1. 开源软件在嵌入式系统中的价值与挑战开源软件已成为现代嵌入式系统开发的重要组成部分。通过合理利用开源组件,开发团队可以显著缩短开发周期,降低研发成本,同时获得经过社区验证的可靠解决方案。然而&am…...
大数据运维 | 项目一:大数据分布式集群搭建全攻略
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 前言 作为一名大数据运维工程师,你是否遇到过这样的问题: 问题场景描述1机器A可正常上网,但机器B无法连接网…...
打破数据标注瓶颈:Label Studio如何让AI训练效率提升300%?
打破数据标注瓶颈:Label Studio如何让AI训练效率提升300%? 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/labe…...
用Python+Control库实现倒立摆LQR控制:从建模到仿真全流程
用PythonControl库实现倒立摆LQR控制:从建模到仿真全流程 倒立摆问题一直是控制理论中的经典案例,它不仅能帮助我们理解线性二次调节器(LQR)的核心思想,还能锻炼我们解决实际工程问题的能力。本文将带你从零开始&#…...
Milvus向量数据库Docker安装避坑指南:从配置到可视化工具Attu的完整流程
Milvus向量数据库Docker安装避坑指南:从配置到可视化工具Attu的完整流程 当开发者第一次接触向量数据库时,往往会遇到各种意想不到的"坑"。作为一款开源的向量数据库,Milvus因其高性能和易用性而广受欢迎,但在Docker环境…...
