PDF查看器小部件示例

一个基于小部件的PDF查看器,允许浏览页面。

PDF查看器演示了如何使用QPdfView类来渲染PDF文档,以及其他QPdfPageNavigator类来导航它们。

创建示例界面并连接到代码使用了Qt Creator和集成的Qt Designer。这可能会影响代码,可能是手写代码所不同。有关使用Qt Designer的更多信息,请参阅Qt Designer手册Qt Creator:创建基于Qt的小部件应用程序

运行示例

要从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变量是QPdfDocument类的实例,其中包含PDF文档。

    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(),大多数主窗口根据UI文件构建。缩放和页面选择器需要通过QToolBar::insertWidget()添加到工具栏中,因为在UI文件中无法完成此操作

    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

© 2024 Qt公司有限公司。本文件中包含的文档贡献属于其各自所有者的版权所有。本文件提供的文档遵循由自由软件基金会发布的GNU自由文档许可证版本1.3的条款。Qt及其相关标志是芬兰以及全球其他国家的 Qt公司所属的商标。所有其他商标均属于其各自所有者。