小知识------QT如何安装并使用QtWebEngineWidgets+python开发简单PDF阅读器

9 篇文章 1 订阅
订阅专栏
4 篇文章 0 订阅
订阅专栏

缘起

最近希望利用QT中QtWebEngineWidgets组件加Python做一个简单的PDF阅读器,进行PDF内容显示,但是在实际开发过程中却遇到了各种问题,主要包括如下几个问题:

  1. QtWebEngineWidgets组件如何安装;
  2. 安装完QtWebEngineWidgets组件后,QtCreator中的组件栏内,并无QtWebEngineWidgets插件可选;
  3. 手工将QtWebEngineWidgets组件绑定道Widgets组件时,提示找不到头文件,或者找不到对应类。
    以上碰到的3个问题,由于并非专业QT开发,在经过一番折腾后才总算解决了,在此记录下,希望能帮助遇到相同问题的朋友。

QtWebEngineWidgets组件安装

开发环境介绍

  • 操作系统:Windows 10
  • 开发语言:python(仅用作业务开发语言)
  • Qt:Qt 5.12.12 + Qt 5.15.2共存
  • QtCreator:5.0.2 + 11.0.0共存(主要用于界面设计,我主要需要ui文件)

QtWebEngineWidgets安装前提

  • 在Qt5.4之前类似于QtWebEngineWidgets的插件叫QtWebKit,所以Qt4.5之前,并没有QtWebEngineWidgets插件。
  • 在Qt5.4之后,QtWebEngineWidgets插件替代了原来的QtWebKit插件。因此,在安装QtWebEngineWidgets时,要先确认你的QT版本问题。
  • 重点:只有MSVC才支持该对象。

QtWebEngineWidgets的安装

QtWebEngineWidgets安装主要利用了QT自身的维护工具,名叫MaintenanceTool,该工具在QT安装主目录下,如下图所示:
Qt维护工具MainTenanceTool
启动该工具,进入“添加或移除组件”项菜单,进入如下界面:
Qt添加组件
点击Qt节点,找到你自己的Qt版本,勾选上MSVC(版本自选),并勾选上Qt WebEngine然后点击下一步就可以安装了。
Qt添加组件
安装完后,QtWebEngineWidgets应该就能正常使用了,但是你在Qt Creator中依然看不到这个插件,那么如何去使用呢?请接着往下看。

QtWebEngineWidgets组件使用

为了演示QtWebEngineWidgets组件的使用,我们以开发一个简单的PDF阅读器为案例为大家讲解。

  • 第一步界面设计:首先在Qt Creator中进行界面设计,就包含一个打开按钮和一个PDF显示控件,界面如下蓝框为PDF显示控件,使用的是Widget控件:
    Pdf阅读器界面

  • 第二步Widgets控件和QtWebEngineWidgets类绑定:为Widgets控件绑定QtWebEngineWidgets类,首先右键点击Widgets控件,然后选择promoted to,并在promoted class name和Header File中分别填入QWebEngineView和QWebEngineView.h,如下图所示:
    Widget绑定QWebEngineView
    然后点击Add,在点击Promote。

  • 第三步添加webenginewidgets到.pro文件,如下图所示:
    WebEngineWidgets使用
    到此,我们便将WebEngineWidgets控件设置完成了,已经可以正常使用他了,在未添加QT += webenginewidgets 代码之前,我们是无法在QTCreator中运行该工程文件的,会报类似如下错误代码:webenginewidgets.h找不到。

  • 第四步将QT工程转换为python文件
    转换代码如下所示:

# ui_PdfReader.py为输出python文件;Widget.ui为QtCreator工程中的UI文件。
pyuic5.exe -o ui_PdfReader.py Widget.ui 

查看ui_PdfReader.py文件,如下所示:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Widget(object):
    def setupUi(self, Widget):
        Widget.setObjectName("Widget")
        Widget.resize(800, 600)
        self.gridLayout = QtWidgets.QGridLayout(Widget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(Widget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
        self.widget = QtWebEngineWidgets.QWebEngineView(Widget)  ##QtWebEngineWidgets控件
        self.widget.setStyleSheet("#widget\n"
"{\n"
"frame{border:2px; solid #014F84}\n"
"background:transparent;\n"
"border:1px solid #014F84;\n"
"}")
        self.widget.setObjectName("widget")
        self.gridLayout.addWidget(self.widget, 1, 0, 1, 1)

        self.retranslateUi(Widget)
        QtCore.QMetaObject.connectSlotsByName(Widget)

    def retranslateUi(self, Widget):
        _translate = QtCore.QCoreApplication.translate
        Widget.setWindowTitle(_translate("Widget", "Widget"))
        self.pushButton.setText(_translate("Widget", "打开"))
from PyQt5 import QtWebEngineWidgets  #引入QtWebEngineWidgets控件

通过代码可以看到QtWebEngineWidgets组件被自动加载进来了。

  • 编写PDF显示代码
    代码主要包括两个部分,一个是文件选择按钮功能实现,一个是让PDF在QtWebEngineWidgets中正常显示的功能实现,我们本案例中都将其编写在打开按钮槽函数中,全部代码如下所示:
import sys
import os

from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QMessageBox
from PyQt5.QtCore import pyqtSlot, QUrl
from PyQt5.QtGui import QIcon
from PyQt5 import QtWebEngineWidgets

from ui_PdfReader import Ui_Widget

class smartDocWin(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_Widget()
        self.ui.setupUi(self)
        

    @pyqtSlot()
    def on_pushButton_clicked(self):
        # 文件选择功能
        self.__srcFilePath, _ = QFileDialog.getOpenFileName(self, "选择PDF文件", "./", "*.pdf")

        # PDF显示功能
        settings = self.ui.widget.settings()
        settings.setAttribute(QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled, True)
        url = QUrl.fromLocalFile(self.__srcFilePath)
        self.ui.widget.load(url)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = smartDocWin()
    form.show()
    sys.exit(app.exec_())

PDF阅读区运行效果如下所示:
python实现PDF阅读器
至此,QtWebEngineWidgets控件的安装于使用和python开发PDF阅读器的内容介绍完成啦,如果觉的对你有帮助的话,欢迎点赞加关注哟。

Qt初入江湖】Qt QtWebEngineWidgets 底层架构、原理详细描述
走向CTO的路上...
08-08 755
QWebEnginePage的底层架构是基于Chromium项目的Web引擎,它使用了多进程的架构来实现Web内容的加载和渲染。上面的代码创建一个QWebEnginePage实例和一个QWebEngineView实例,并将QWebEnginePage设置为QWebEngineView的页面。然后,它创建一个QWidget窗口,将布局设置为该窗口的布局,并显示该窗口。在上面的代码中,QWebEngineView的构造函数创建一个新的QWebEnginePage,并将其设置为该视图的默认页面。
Qt使用 poppler-qt5实现PDF阅读器
09-02
在本文中,我们将深入探讨如何使用Qt结合poppler-qt5库来开发一个功能完备的PDF阅读器Qt是一个跨平台的应用程序开发框架,而poppler-qt5是基于poppler库的一个Qt接口,用于处理PDF文档。我们将讨论以下几个关键...
01-Qt WebEngine模块开发环境搭建
hurryddd
01-27 6876
QT WebEngine开发环境搭建
PyQt5缺少QtWebEngineWidgets解决方法
最新发布
weixin_42026677的博客
07-07 156
https://www.cainiaoya.com/pyqt5/pyqt5-jiaocheng.html安装 PyQtWebEngine: PyQtWebEngine 是 PyQt5 的一个扩展模块,它包含 QtWebEngineWidgets。登录后复制 pip install PyQtWebEngine1.确保正确...
Qt中的webenginewidgets模块
weixin_51883798的博客
06-10 1783
QDir("hello1.html")是相对路径,之后转换为绝对路径了。(1)准备工作1,pro文件中加入webenginewidgets模块。(5) 如果要显示本地文件夹下的.html文件的话。(3) 显示百度主页面的代码。当前路径是xxx-Debug。
探索 Qt WebEngineWidgets:从底层原理到高级应用与技巧
探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。
04-18 2262
探索 Qt WebEngineWidgets:从底层原理到高级应用与技巧
QtWebEngine Widget各部分详述
Flywithdawn的博客
04-06 6021
QtWebEngine 一、架构 1.1 模块 Qt WebEngine中的功能分为以下模块: 模块 功能 Qt WebEngine Widgets C++ Classes 提供用于在基于 QWidget 的应用程序中呈现 Web 内容的C++类。 Qt WebEngine QML Types 提供 QML 类型,用于在 QML 应用程序中呈现 Web 内容。 Qt WebEngine Widgets C++ Classes 提供用于在基于 QWidget 的应用程序中呈现 Web
PyQt5缺少QtWebEngineWidgets解决方法 QWebEngineView浏览器框
摘星阁
06-05 1万+
需要用PyQt做个简单的网页浏览器,根据教程操作时发现我的PyQt里没有QtWebEngineWidgets。查阅相关资料之后发现这个库在 的时候不会安装,需要另外补充安装安装后既可解决这个问题
qt 组件添加避坑
Fly_Sky
04-14 1100
始:项目要和web交互,搜索到可以用QWebEngineView,包含头文件 #include <QWebEngineView> QWebEngineView*view = new QWebEngineView(parent); view->load(QUrl("http://qt-project.org/")); view->show(); 过程: 1.开发环境为vs2017+qt5.9.0 ,编译提示缺少指定模块。 2.在vs的项目属性->
python-qt_qt-python_
10-03
Python-qt项目可能使用QMainWindow创建了主窗口,并添加了自定义布局和控件。 3. **布局管理(Layout Management)**:Qt提供网格布局(QGridLayout)、垂直布局(QVBoxLayout)、水平布局(QHBoxLayout)等多种...
Python-适合初学者Python程序员的小型简单编辑器用PythonQt5编写
08-10
标题中的“Python-适合初学者Python程序员的小型简单编辑器用PythonQt5编写”指出,这个项目是一个专为Python初学者设计的编辑器。它使用Python编程语言以及Qt5库来构建,Qt5是一个功能强大的跨平台应用程序开发...
python-qt-tutorial:Python Qt教程
02-05
Python Qt教程是一个面向初学者和进阶者的学习资源,它涵盖了使用PythonQt库进行桌面应用开发的基础到高级概念。Qt是一个跨平台的应用程序开发框架,广泛用于创建GUI(图形用户界面)应用,而Python是一种易学且...
baseone-python-qt5-master.zip
02-27
下载并解压"baseone-python-qt5-master.zip"后,开发者可以按照常规步骤来安装使用这个Python2.7兼容的PyQT5版本。需要注意的是,由于不是通过pip安装,可能需要手动添加到Python的路径中,或者在项目中进行特定的...
No module named ‘PyQt5.QtWebEngineWidgets‘kn-----已解决
weixin_64338372的博客
11-30 5808
本人在学习PyQt5的时候遇到了报错的情况,原因就是ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'没有PyQt5.QtWebEngineWidgets,自己总结出了一个很好的办法。
Project ERROR: Unknown module(s) in QT: webenginewidgets
aoxuestudy的专栏
03-11 6510
Project ERROR: Unknown module(s) in QT: webenginewidgets QT += webenginewidgets这句后,编译一直报下面错误 Project ERROR: Unknown module(s) in QT: webenginewidgets
QT通过webenginewidgets模块实现web连接
xiaoluo2333的博客
05-05 491
1.需要使用到MSVC,MINGW不行。需要做好MSVC中的配置工作,一般是下载了相对应的Visual studio都可以实现配置成功。240505.pro文件中的代码,注意要手动添加webgnginewidgets模块。2.添加一个Widget控件并且提升为QWebEngineView。3.回到编辑代码模式,下面附带了实现的源码。
Unknown module(s) in QT: webenginewidgets原因及解决办法
热门推荐
sinat_41928334的博客
06-27 3万+
今天学习时,想使用QWebEngineView做一个显示网页的小项目。在.pro文件中加入QT += webenginewidgets这句后,编译一直报下面错误 Project ERROR: Unknown module(s) in QT: webenginewidgets 查资料常见原因以下三种: 1)QT版本过低。需要QT版本号为QT5.5版本及其以上。从Qt5.5开始,Qt WebKit模块被废弃,取而代之的是Qt WebEngine模块。且只有MSVC才支持该...
Qt实现简易的浏览器
Jerich2213的博客
11-12 3459
第一步:配置webenginewidgets模块和MSVC2017编译环境 第二步:在你的Qt项目中配置kit。 第三步:重写QWebEngineView类 第四步:和使用其他控件的方法一样
Qt webengine 显示web页面、前后端通信以及下载详解
FlayHigherGT的博客
03-06 7821
Qt webengine
:-1: error: Unknown module(s) in QT: pdf webenginewidgets
05-26
这个错误通常是由于缺少QTpdfwebenginewidgets模块引起的。您需要确保您的QT已经正确安装并且包含这些模块。如果您使用的是Linux系统,可以尝试使用包管理器安装相应的QT模块。 如果您已经安装了这些模块,但仍然遇到此错误,请检查您的项目配置是否正确。在项目文件中,您需要包含相应的QT模块: ``` QT += pdf webenginewidgets ``` 如果您使用的是Qt Creator,可以在项目配置中的“QT”部分中添加这些模块。
写文章

热门文章

  • 【问题处理小知识】jupyter notebook报错:500 internal server error的几种解决办法整理 6311
  • 探索人工智能的边界:GPT 4.0与文心一言 4.0免费使用体验全揭秘! 6162
  • 小知识------QT如何安装并使用QtWebEngineWidgets+python开发简单PDF阅读器 4908
  • 【问题处理小知识】pip安装第三方库时No module named ‘_distutils_hack‘错误处理 3933
  • 【全面认知YOLO系列】第一部分:YOLO系列模型发展史 3043

分类专栏

  • 实战目标检测 付费 12篇
  • python全栈面试宝典 付费 48篇
  • 计算机视觉 4篇
  • Ultralytics从入门到实战 4篇
  • 科普 7篇
  • 动手学机器学习 2篇
  • python面试题 5篇
  • 图像超分辨率 6篇
  • 大模型 7篇
  • 未来 1篇
  • Python 9篇
  • 工具开发 4篇
  • 数据分析 4篇
  • 玄学笔记 2篇
  • 深度学习 4篇
  • 机器学习 1篇
  • Tensorflow
  • 强化学习
  • CV 1篇
  • NLP 1篇

最新评论

  • 【问题处理小知识】jupyter notebook报错:500 internal server error的几种解决办法整理

    洛兮银儿: 已经解决

  • 【问题处理小知识】jupyter notebook报错:500 internal server error的几种解决办法整理

    iconicici: 'pip' 不是内部或外部命令,也不是可运行的程序 或批处理文件。怎么办呢

  • 【问题处理小知识】jupyter notebook报错:500 internal server error的几种解决办法整理

    今天也是个妖精头子呀: 楼主的方法1,2,3都接着执行了一遍,然后重新启动了jupyter,问题解决。赞!

  • Python面试宝典:Python中与设计模式相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

    普通网友: 写的很详细,感谢博主的分享。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 超越视觉极限:深度学习图像超分辨率算法清单【第三部分】

    普通网友: 干货满满,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

最新文章

  • 利用Python轻松从视频中抽取帧
  • 使用 Ultralytics YOLO 进行模型预测的详细细节介绍
  • 重复图片查找:巧用Python和OpenCV进行图像哈希与汉明距离检测以从海量图片中找出重复图片
2024
08月 2篇
07月 12篇
06月 18篇
05月 46篇
04月 13篇
02月 1篇
01月 11篇
2023年6篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑洞笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码大芬百姓网标王推广木棉湾企业网站建设坪地优化大鹏如何制作网站爱联品牌网站设计福田网站设计南山网站搭建平湖百度关键词包年推广坑梓百度标王石岩网站推广广州百度标王光明关键词按天扣费南澳设计网站广州关键词按天收费丹竹头网站建设龙华网站建设设计西乡百姓网标王推广南联建设网站南山阿里店铺托管大浪设计网站双龙网站推广方案盐田百度竞价包年推广双龙网站seo优化大芬企业网站制作惠州高端网站设计光明网站优化排名同乐阿里店铺托管西乡营销型网站建设大鹏企业网站改版布吉模板推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化