Sur cette page

Exemple de widget de visualisation de PDF

Une visionneuse de PDF basée sur un widget qui permet de faire défiler les pages.

Visionneuse PDF avec panneau de signets à gauche et zone d'affichage principale à droite montrant la page de titre du document

PDF Viewer montre comment utiliser la classe QPdfView pour rendre les documents PDF et la classe QPdfPageNavigator pour les parcourir.

Qt Creator et le site Qt Widgets Designer intégré ont été utilisés pour créer l'interface utilisateur de l'exemple et pour la relier au code. Cela affecte le code, qui peut être quelque peu différent de ce que vous écririez habituellement à la main. Pour plus d'informations sur l'utilisation de Qt Widgets Designer, voir Qt Widgets Designer Manual et Qt Creator: Tutorial : Qt Widgets application.

Exécution de l'exemple

Pour exécuter l'exemple à partir de Qt Creatorouvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutorial : Construire et exécuter.

Création de la fenêtre principale

La classe MainWindow hérite de la classe QMainWindow:

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

La classe déclare des emplacements publics et privés qui correspondent aux actions des sélecteurs :

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();

La disposition réelle de la fenêtre principale est spécifiée dans un fichier .ui. Les widgets et les actions sont disponibles au moment de l'exécution dans la variable membre ui.

    void on_actionFindNext_triggered();
    void on_actionFindPrevious_triggered();

private:
    Ui::MainWindow *ui;

La variable m_zoomSelector contient le sélecteur de zoom et la variable m_pageSelector contient le sélecteur de page. La variable m_document est une instance de la classe QPdfDocument qui contient le document PDF.

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

    QPdfDocument *m_document;
};

La configuration des différents objets est effectuée dans le constructeur de la fenêtre principale :

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))
{

Le constructeur appelle d'abord setupUi() pour construire la majeure partie de la fenêtre principale conformément au fichier UI. Les sélecteurs de zoom et de page doivent être ajoutés à la barre d'outils via QToolBar::insertWidget(), car cela ne peut pas être fait dans un fichier d'interface utilisateur :

    ui->setupUi(this);

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

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

Nous connectons les signaux pertinents à la boîte à outils du sélecteur de page et aux boutons de retour et d'avance de type navigateur :

    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);

Nous connectons les signaux zoomModeChanged et zoomFactor modifiés de la vue PDF aux fonctions qui réinitialisent le sélecteur de zoom :

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

Nous chargeons ensuite le document PDF dans la visionneuse :

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

Enfin, nous connectons le signal zoomFactorChanged à la fonction qui définit la valeur du sélecteur de zoom :

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

Fichiers et attributions

Exemple de projet @ code.qt.io

© 2026 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.