linux里qt画直线_Qt的pdf阅读器(Qt的Pdf模块-依赖Chrome的pdfium

e315685bec3fdf20355991ba11d541a6.png

目前Qt的pdf模块还在预览阶段,很久之前就听说了Qt封装了chrome里的pdfium模块,一直想尝试下。恰好自己的电脑重新装了个Ubuntu20.04.这次准备自己编译下。

编译环境的配置

首先本地编译好Qt5.15。

具体Ubuntu如何编译Qt5.15源码可以参考这个

https://www.cryfeifei.top/2020/06/28/qt-compile-linux/

由于我们要自己编译QtWebEngine QtPdf模块,都是一套源码,所以建议自己编译下

其实官方文档都有 https://wiki.qt.io/QtWebEngine/How_to_Try

我这里上下我的编译环境脚本吧。

sudo apt-get install bison build-essential gperf flex ruby python libasound2-dev libbz2-dev libcap-dev 
libcups2-dev libdrm-dev libegl1-mesa-dev libgcrypt11-dev libnss3-dev libpci-dev libpulse-dev libudev-dev 
libxtst-dev gyp ninja-build

sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev 
libfontconfig1-dev libxss-dev libsrtp0-dev libwebp-dev libjsoncpp-dev libopus-dev libminizip-dev 
libavutil-dev libavformat-dev libavcodec-dev libevent-dev libvpx-dev libsnappy-dev libre2-dev libprotobuf-dev protobuf-compiler

由于我们自己下载的源码,所以官方文档中建议的git相关的操作全都不需要了

直接新建一个目录,使用我们自己编译好的qmake

mkdir build_webengine
cd build_webengine
/media/zhangpf/work1/Qt5.15/build/bin/qmake /media/zhangpf/work1/Qt5.15/qt-everywhere-src-5.15.1/qtwebengine/qtwebengine.pro

注意点:

  • qmake一定要使用绝对路径。
  • qmake成功后一定要仔细看configure的提示信息,看pdf模块跟webengine模块是否弄好
  • 要多给电脑点swap空间

扩大swap空间

我这增加了64个G的swap空间。 我本地16G物理内存+2G虚拟内存反正编译不过。 回报错 一怒之下就....64G

mkdir /media/zhangpf/work1/swapfile
cd /media/zhangpf/work1/swapfile/
sudo dd if=/dev/zero of=swap bs=1G count=64
sudo mkswap -f swap
sudo swapon swap

在当前编译的终端加上64G。没必要开机就挂载。反正就编译这一次

编译

make -j7 //我本地8核
make install

install之后我们自己编译的qt就可以用webeinine了。

编译安装完成之后,可以新建一个项目,在pro文件中添加

QT       += core gui pdf

OK,kit识别pdf模块了

1.使用Qt官方的demo,发现打开,编译不过

然后我又自己重新组织了下工程,这下可以编译通过并使用了。已经上传到github

https://github.com/CryFeiFei/QtPdfTest​github.com

上个图

867ad315fc9c861ece7b057e0ed52c95.png

经过测试,发现多页渲染之类的太流畅了,比我原来使用poppler的效果好太多了。

而且,看源码,发现里面直接引用的pdfium的代码

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include "qpdflinkmodel_p.h"
#include <private/qabstractitemmodel_p.h>

#include "third_party/pdfium/public/fpdfview.h"

#include <QUrl>

QT_BEGIN_NAMESPACE

class QPdfLinkModelPrivate: public QAbstractItemModelPrivate
{
    Q_DECLARE_PUBLIC(QPdfLinkModel)

这些api之类的还没有成为官方正式API,大家可以学习下。

吹一下

  • 不用再挂代理下工具链了,源码里都有了
  • 渲染真的快啊,真的快
  • 书签居然还提供了一个model类,这样都不用自己写了。QPdfBookmarkModel
  • 看类结构,目前widget跟qml是一起的,以后可以解耦。
  • 可以从这个源码学习一下Qt是如何封装第三方库的(这是Qt最擅长的

猜测

  1. qml跟qwidget应该会分开
  2. 以后这个模块估计会大规模重构(废话)
  3. pdfium应该会用cmake or qmake重新组织,但是pdfium依赖skia,估计以后会一起打包
  4. 不知道skia这个第三方库以后会不会嵌入到Qt里,作为Qt的一个新的paintengine来搞。(我倒是有想法,又立一个flag了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值