【QT】 QT开发PDF阅读器

阅读: 评论:0

【QT】 QT开发PDF阅读器

【QT】 QT开发PDF阅读器

很高兴在雪易的CSDN遇见你 ,给你糖糖

欢迎大家加入雪易社区-CSDN社区云 


前言

本文分享QT开发PDF阅读器技术,希望对各位小伙伴有所帮助!

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO

结果展示:

我将收获到的:

        1. 如何创建PDFViewer

        2.创建PDFViewer所依赖的QT库

        3.PDFViewer的用处

目录

前言

1.准备PDFViewer所依赖的库

2.创建PDF Viewer

小结:


1.准备PDFViewer所依赖的库

        》使用开发的QT版本:5.15.2

        》存在问题:不能直接添加PDF模块

        》原因:QT5.15.2版本已带有pdf模块,但并未在include中包含,但是在lib和bin目录下能找到相应的.lib和.dll文件。

        》解决方案:

                》下载QT5.15.2源码

                》将“Qt5.15.2Srcqtwebengineinclude”文件夹下的QtPdf和QtPdfWidgets复制到“Qt5.15.2msvc2019_64include”文件夹下。

                》 将“Qt5.15.2Srcqtwebenginesrcpdfapi”文件夹下的.h文件复制到“Qt5.15.2msvc2019_64includeQtPdf”文件夹下。

                》 将“Qt5.15.2Srcqtwebenginesrcpdfwidgets”文件夹下的.h文件复制到“Qt5.15.2msvc2019_64includeQtPdfWidgets”文件夹下 

                 》我已将QtPdf整理成单独的依赖库,需要的小伙伴可以联系我下载。

                    也上传CSDN,下载地址:QT开发PDF阅读器,代码简洁易用!资源-CSDN文库 

2.创建PDF Viewer

        》创建UI文件

        》核心为PageSelector(页面选择)和ZoomSelector(缩放)

        》下载地址:QT开发PDF阅读器,代码简洁易用!资源-CSDN文库

        》代码如下:

        PageSelector.h文件

#ifndef PAGESELECTOR_H
#define PAGESELECTOR_H#include <QWidget>class QLabel;
class QLineEdit;
class QPdfDocument;
class QPdfPageNavigation;
class QToolButton;class PageSelector : public QWidget
{Q_OBJECTpublic:explicit PageSelector(QWidget *parent = nullptr);void setPageNavigation(QPdfPageNavigation *pageNavigation);private slots:void onCurrentPageChanged(int page);void pageNumberEdited();private:QPdfPageNavigation *m_pageNavigation;QLineEdit *m_pageNumberEdit;QLabel *m_pageCountLabel;QToolButton *m_previousPageButton;QToolButton *m_nextPageButton;
};#endif // PAGESELECTOR_H

        PageSelector.cpp文件

#include "pageselector.h"#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPdfPageNavigation>
#include <QToolButton>PageSelector::PageSelector(QWidget *parent): QWidget(parent), m_pageNavigation(nullptr)
{QHBoxLayout *layout = new QHBoxLayout(this);m_previousPageButton = new QToolButton(this);m_previousPageButton->setText("<");m_previousPageButton->setEnabled(false);m_pageNumberEdit = new QLineEdit(this);m_pageNumberEdit->setAlignment(Qt::AlignRight);m_pageCountLabel = new QLabel(this);m_pageCountLabel->setText("0");m_nextPageButton = new QToolButton(this);m_nextPageButton->setText(">");m_nextPageButton->setEnabled(false);layout->addWidget(m_previousPageButton);layout->addWidget(m_pageNumberEdit);layout->addWidget(m_pageCountLabel);layout->addWidget(m_nextPageButton);
}void PageSelector::setPageNavigation(QPdfPageNavigation *pageNavigation)
{m_pageNavigation = pageNavigation;connect(m_previousPageButton, &QToolButton::clicked, m_pageNavigation, &QPdfPageNavigation::goToPreviousPage);connect(m_pageNavigation, &QPdfPageNavigation::canGoToPreviousPageChanged, m_previousPageButton, &QToolButton::setEnabled);connect(m_pageNavigation, &QPdfPageNavigation::currentPageChanged, this, &PageSelector::onCurrentPageChanged);connect(m_pageNavigation, &QPdfPageNavigation::pageCountChanged, this, [this](int pageCount){ m_pageCountLabel->setText(QString::fromLatin1("/ %1").arg(pageCount)); });connect(m_pageNumberEdit, &QLineEdit::editingFinished, this, &PageSelector::pageNumberEdited);connect(m_nextPageButton, &QToolButton::clicked, m_pageNavigation, &QPdfPageNavigation::goToNextPage);connect(m_pageNavigation, &QPdfPageNavigation::canGoToNextPageChanged, m_nextPageButton, &QToolButton::setEnabled);onCurrentPageChanged(m_pageNavigation->currentPage());
}void PageSelector::onCurrentPageChanged(int page)
{if (m_pageNavigation->pageCount() == 0)m_pageNumberEdit->setText(QString::number(0));elsem_pageNumberEdit->setText(QString::number(page + 1));
}void PageSelector::pageNumberEdited()
{if (!m_pageNavigation)return;const QString text = m_pageNumberEdit->text();bool ok = false;const int pageNumber = Int(&ok);if (!ok)onCurrentPageChanged(m_pageNavigation->currentPage());elsem_pageNavigation->setCurrentPage(qBound(0, pageNumber - 1, m_pageNavigation->pageCount() - 1));
}

        ZoomSelector.h文件

#ifndef ZOOMSELECTOR_H
#define ZOOMSELECTOR_H#include <QComboBox>
#include <QPdfView>class ZoomSelector : public QComboBox
{Q_OBJECTpublic:explicit ZoomSelector(QWidget *parent = nullptr);public slots:void setZoomFactor(qreal zoomFactor);void reset();signals:void zoomModeChanged(QPdfView::ZoomMode zoomMode);void zoomFactorChanged(qreal zoomFactor);private slots:void onCurrentTextChanged(const QString &text);
};#endif // ZOOMSELECTOR_H

        ZoomSelector.cpp文件

#include "zoomselector.h"#include <QLineEdit>ZoomSelector::ZoomSelector(QWidget* parent): QComboBox(parent)
{setEditable(true);addItem(QLatin1String("Fit Width"));addItem(QLatin1String("Fit Page"));addItem(QLatin1String("12%"));addItem(QLatin1String("25%"));addItem(QLatin1String("33%"));addItem(QLatin1String("50%"));addItem(QLatin1String("66%"));addItem(QLatin1String("75%"));addItem(QLatin1String("100%"));addItem(QLatin1String("125%"));addItem(QLatin1String("150%"));addItem(QLatin1String("200%"));addItem(QLatin1String("400%"));connect(this, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),this, &ZoomSelector::onCurrentTextChanged);connect(lineEdit(), &QLineEdit::editingFinished,this, [this]() {onCurrentTextChanged(lineEdit()->text()); });
}void ZoomSelector::setZoomFactor(qreal zoomFactor)
{setCurrentText(QString::number(qRound(zoomFactor * 100)) + QLatin1String("%"));
}void ZoomSelector::reset()
{setCurrentIndex(8); // 100%
}void ZoomSelector::onCurrentTextChanged(const QString& text)
{if (text == QLatin1String("Fit Width")) {emit zoomModeChanged(QPdfView::FitToWidth);}else if (text == QLatin1String("Fit Page")) {emit zoomModeChanged(QPdfView::FitInView);}else {qreal factor = 1.0;QString withoutPercent(text);ve(QLatin1Char('%'));bool ok = false;const int zoomLevel = Int(&ok);if (ok)factor = zoomLevel / 100.0;emit zoomModeChanged(QPdfView::CustomZoom);emit zoomFactorChanged(factor);}
}

小结:

        本文主要分享了开发PDF阅读器所依赖的库,以及开发的过程,谢谢各位小伙伴的关注。

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的赞赏是我的最最最最大的动力(^U^)ノ~YO

本文发布于:2024-02-04 18:01:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170713200358083.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:阅读器   QT   PDF
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23