PDF 浏览器小工具示例

基于 Widget 的 PDF 浏览器,可滚动浏览页面。

PDF Viewer演示了如何使用QPdfView 类渲染 PDF 文档以及使用QPdfPageNavigator 类浏览 PDF 文档。

Qt Creator 和集成的 用于创建示例用户界面并将其与代码连接。这将影响代码,可能与您通常手写的代码有些不同。有关使用 的更多信息,请参阅Qt Widgets Designer Qt Widgets DesignerQt Widgets Designer 手册和 :Qt Creator 教程 Qt Widgets 应用程序

运行示例

运行示例 Qt Creator,打开Welcome 模式,然后从Examples 中选择示例。更多信息,请参阅Qt Creator: 教程构建并运行

创建主窗口

MainWindow 类继承于QMainWindow 类:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

该类声明了与选择器操作相匹配的公共和私有槽:

public slots:
    void open(const QUrl &docLocation);

private slots:
    void bookmarkSelected(const QModelIndex &index);
    void pageSelected(int page);
    void searchResultSelected(const QModelIndex &current, const QModelIndex &previous);

    // action handlers
    void on_actionOpen_triggered();
    void on_actionQuit_triggered();
    void on_actionAbout_triggered();
    void on_actionAbout_Qt_triggered();
    void on_actionZoom_In_triggered();
    void on_actionZoom_Out_triggered();
    void on_actionPrevious_Page_triggered();
    void on_actionNext_Page_triggered();
    void on_thumbnailsView_activated(const QModelIndex &index);
    void on_actionContinuous_triggered();
    void on_actionBack_triggered();
    void on_actionForward_triggered();

主窗口的实际布局在.ui 文件中指定。运行时,可在ui 成员变量中使用部件和操作。

    void on_actionFindNext_triggered();
    void on_actionFindPrevious_triggered();

private:
    Ui::MainWindow *ui;

m_zoomSelector 变量包含缩放选择器,m_pageSelector 包含页面选择器。m_document 变量是包含 PDF 文档的QPdfDocument 类的实例。

    ZoomSelector *m_zoomSelector;
    QPdfPageSelector *m_pageSelector;
    QPdfSearchModel *m_searchModel;
    QLineEdit *m_searchField;
    QFileDialog *m_fileDialog = nullptr;

    QPdfDocument *m_document;
};

不同对象的实际设置是在 MainWindow 构造函数中完成的:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_zoomSelector(new ZoomSelector(this))
    , m_pageSelector(new QPdfPageSelector(this))
    , m_searchModel(new QPdfSearchModel(this))
    , m_searchField(new QLineEdit(this))
    , m_document(new QPdfDocument(this))
{

构造函数首先调用setupUi() ,根据用户界面文件构造主窗口的大部分内容。缩放和页面选择器需要通过QToolBar::insertWidget() 添加到工具栏中,因为这无法在用户界面文件中完成:

    ui->setupUi(this);

    m_zoomSelector->setMaximumWidth(150);
    ui->mainToolBar->insertWidget(ui->actionZoom_In, m_zoomSelector);

    ui->mainToolBar->insertWidget(ui->actionForward, m_pageSelector);

我们将相关信号连接到页面选择器旋转框以及浏览器风格的后退和前进按钮:

    connect(m_pageSelector, &QPdfPageSelector::currentPageChanged, this, &MainWindow::pageSelected);
    m_pageSelector->setDocument(m_document);
    auto nav = ui->pdfView->pageNavigator();
    connect(nav, &QPdfPageNavigator::currentPageChanged, m_pageSelector, &QPdfPageSelector::setCurrentPage);
    connect(nav, &QPdfPageNavigator::backAvailableChanged, ui->actionBack, &QAction::setEnabled);
    connect(nav, &QPdfPageNavigator::forwardAvailableChanged, ui->actionForward, &QAction::setEnabled);

我们将 PDF 视图的zoomModeChangedzoomFactor 更改信号连接到重置缩放选择器的函数:

    connect(m_zoomSelector, &ZoomSelector::zoomModeChanged, ui->pdfView, &QPdfView::setZoomMode);
    connect(m_zoomSelector, &ZoomSelector::zoomFactorChanged, ui->pdfView, &QPdfView::setZoomFactor);
    m_zoomSelector->reset();

然后,我们将 PDF 文档加载到浏览器中:

    ...
    ui->pdfView->setSearchModel(m_searchModel);

最后,我们将zoomFactorChanged 信号连接到设置缩放选择器值的函数:

    ui->searchToolBar->insertWidget(ui->actionFindPrevious, m_searchField);
    connect(new QShortcut(QKeySequence::Find, this), &QShortcut::activated, this, [this]() {
        m_searchField->setFocus(Qt::ShortcutFocusReason);
    });

文件和属性

示例项目 @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.