首页 > 其他分享 >039-第三代软件开发-PDF阅读器

039-第三代软件开发-PDF阅读器

时间:2023-11-05 20:37:56浏览次数:30  
标签:文件 pdfView C++ 039 QML 阅读器 PDF 我们


039-第三代软件开发-PDF阅读器_LTDev

第三代软件开发-PDF阅读器


文章目录

  • 第三代软件开发-PDF阅读器
  • 项目介绍
  • PDF阅读器
  • 1 初始化PDF view
  • 2 qml 中使用
  • 3 创建模块



关键字:

Qt

Qml

pdf

LTDev

本地

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!


PDF阅读器

同上篇【038_第三代软件开发-简易视频播放器自定义Slider (二)】一样,这个功能就是为了显示我们的软件说明书。同样适用平率不怎么搞,而QML本身好像不怎么具备PDF文件的预览的。这里我最开始向导的就是使用web来实现,并且我真的非常非常认真的让GPT给我写了一个H5,我在Google浏览器里面测试没有问题。代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>打开和预览本地PDF文件</title>
</head>
<body>
    <input type="file" id="pdfInput" accept=".pdf">
    <embed id="pdfPreview" type="application/pdf" width="100%" height="600px">

    <script>
        document.getElementById('pdfInput').addEventListener('change', function(e) {
            var file = e.target.files[0];
            var reader = new FileReader();
            reader.onload = function(e) {
                document.getElementById('pdfPreview').setAttribute('src', e.target.result);
            };
            reader.readAsDataURL(file);
        });
    </script>
</body>
</html>

在上述示例中,我们使用了<input type="file">元素来创建一个选择文件的输入框,并通过添加accept=".pdf"来限制只能选择PDF文件。接下来,我们使用<embed>元素来创建一个用于预览PDF文件的窗口。

当用户选择一个PDF文件后,change事件将被触发。我们在事件处理程序中获取用户选择的文件对象,并创建一个FileReader对象来读取文件内容。读取完成后,我们将结果(即PDF文件的数据URL)赋值给<embed>标签的src属性,以便在窗口中预览PDF文件。

请注意,由于安全限制,Web浏览器可能会阻止直接在页面中预览本地文件。因此,这个示例可能在某些浏览器中无法正常工作。

但是呢,当我把这个放到Qt里面的时候,发现无法使用,所以我转向的万能的github。最后,我发现了一个线程的轮子可以用,很遗憾的是我没有存链接,我好找了一圈,也没有再次找到,也没有fork 一下。所以我把目前的这部分代码打包了一下,上传了,0积分下载,大家可以直接下载使用。

链接地址:

1 初始化PDF view

首先我们需要在main.cpp里面包含头文件

#include <QtWebView/QtWebView>

#include "it/ltdev/qt/cpp/components/qtpdfviewerinitializer.h"

紧接着需要咋我们的QApplication创造前完成初始化

LTDev::QtPdfViewerInitializer::initialize();

在完成QApplication初始化后链接QApplication结束信号槽

QObject::connect(&app, &QApplication::aboutToQuit, LTDev::QtPdfViewerInitializer::getInstance(), LTDev::QtPdfViewerInitializer::deleteInstance);

完成以上基本,这里我们可以编译一下,看下是否存在问题,存在修复即可,不存在,就可以在QML中包含对应模块,使用了。

2 qml 中使用

首先同样,需要在qml import相关模块,最后一个就是我们的pdf模块

import QtWebView 1.15
import QtWebEngine 1.10
import it.ltdev.qt.qml.components 1.0 as LTDev

3 创建模块

这部分就可以把它当做有个普通的控件来使用就可以了,重要的我在注释中也说了,在ubuntu 下是需要–no-sandbox参数运行程序的。

/*
    WebView 模块运行需要加 --no-sandbox参数
    --no-sandbox 参数不能使用 gdb调试,如果要使用gdb 调试,可以先把这个注释掉,这个就是一个展示帮助文档的PDF
  */
  LTDev.PdfView {
      id: pdfView
      anchors.fill: parent
      visible: true
      one rror: {
          pdfView.visible = false
          pdfView.opacity = 0
          var json = JSON.parse(message)
      }
      onViewerLoaded: {
          pdfView.load("/home/UserHelp.pdf")
      }
      onPdfLoaded: {
          pdfView.visible = true
          pdfView.opacity = 1
      }
  }

039-第三代软件开发-PDF阅读器_Qml_02


标签:文件,pdfView,C++,039,QML,阅读器,PDF,我们
From: https://blog.51cto.com/DreamLife/8194988

相关文章

  • Entering China's strategies of water pollution and identifying an effective mea
    WaterPollutionControlStrategiesinChina(Someexamples)(1)China’sstrategyforcontrollingwaterpollutionfocusedfirstonreducingthedischargeofoxygen-demandingsubstances.The11thFiveYearPlan(FYP),adoptedin2006containedbindingtargets......
  • 免费格式转换工具箱,PDF candy
     随着我们办公所遇到的情况多样化,有时候为了让word文件不在别的电脑上乱码,或者为了符合任务的要求,我们经常需要针对格式进行转换,可是虽然wps有这个功能,但是它需要会员,今天就给大家带来稳定免费的PDF转换工具,没错,就是PDFCandydesktop!!!PDFCandydesktop具有以下特点:支持多种文......
  • 再也不用充值会员转换PDF了!!!
    PDFCandyDesktop是一款强大的PDF编辑和管理工具,它提供了一套全面的解决方案,让您可以轻松地创建、编辑、转换和优化PDF文件。无论您是一名学生、教师、企业家还是自由职业者,PDFCandyDesktop都能满足您的所有需求。PDFCandyDesktop的界面设计简洁明了,所有的功能都一目了然。您......
  • CF1089K King Kog's Reception 题解
    题目传送门前置知识线段树解法第一眼感觉和luoguP1083[NOIP2012提高组]借教室很像。本题同样采用线段树维护,\(sum_{l,r}(1\lel\ler\le10^6)\)表示从\(l\simr\)时刻内骑士拜访的总时间,\(maxx_{l,r}(1\lel\ler\le10^6)\)表示从\(l\simr\)时刻内骑士......
  • python实现PDF文件指定页码号裁剪
    代码importPyPDF2out_pdf=PyPDF2.PdfFileWriter()dst_file=f'output.pdf'withopen('input.pdf','rb')assrc_file: reader=PyPDF2.PdfFileReader(src_file) pages=reader.numPages forpinrange(12): #这里是获取源PDF前12页,......
  • version `GLIBC_2.34' not found (required by ./rmblastn)
     001、问题如下: 002、解决方法:    003、 参考:01、 ......
  • postman读取不到文件This file isn't in your working directory问题的解决方法
    遇到问题使用postman发起请求时,看到感叹号提示,具体信息如下:Thisfileisn'tinyourworkingdirectory.Teammatesyousharethisrequestwithwon'tbeabletousethisfile.TomakecollaborationeasieryoucansetupyourworkingdirectoryinSettings.解决方法进......
  • qt---主进程加载一个子进程的方法以及其中遇到“Calling a private constructor of cl
    .proQT+=coreguigreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsCONFIG+=c++17#YoucanmakeyourcodefailtocompileifitusesdeprecatedAPIs.#Inordertodoso,uncommentthefollowingline.#DEFINES+=QT_DISABLE_DEPRECATED_BEFORE=0......
  • Flutter开发遇到The instance member 'widget' can't be accessed in an initializer.
    问题描述Theinstancemember'widget'can'tbeaccessedinaninitializer.问题原因"Theinstancemember'widget'can'tbeaccessedinaninitializer"错误是因为在初始化器列表中(constructorinitializerlist)访问了widget成员。这是因为在构造函数的初始化器......
  • 【专题】生成式AI:产业变革与机会论坛(演讲PPT)报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34132自18世纪中期工业革命以来,人类进入工业社会。在历次工业革命中,人类通过发明创造和管理革新,改进生产方式、降低成本、提高效率,随之而来的是生活、物质、文化、教育等各方面的变化,人际关系和社会结构也得以重塑。如今,数字化技术的发展为工业注入......