PDF Viewer Widget Beispiel
Ein Widget-basierter PDF-Viewer, der das Blättern durch die Seiten ermöglicht.
PDF Viewer demonstriert, wie man die Klasse QPdfView zum Rendern von PDF-Dokumenten und die Klasse QPdfPageNavigator zum Navigieren verwendet.
Qt Creator und der integrierte Qt Widgets Designer wurden verwendet, um die Beispiel-UI zu erstellen und sie mit dem Code zu verbinden. Dies wirkt sich auf den Code aus, der sich etwas von dem unterscheidet, was Sie normalerweise von Hand schreiben würden. Weitere Informationen zur Verwendung von Qt Widgets Designer finden Sie unter Qt Widgets Designer Manual und Qt Creator: Creating a Qt Widget Based Application.
Ausführen des Beispiels
Um das Beispiel auszuführen Qt Creatorzu starten, öffnen Sie den Welcome Modus und wählen Sie das Beispiel von Examples. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
Erstellen des Hauptfensters
Die Klasse MainWindow erbt von der Klasse QMainWindow:
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow();
Die Klasse deklariert öffentliche und private Slots, die den Aktionen der Selektoren entsprechen:
public slots: void open(const QUrl &docLocation); private slots: void bookmarkSelected(const QModelIndex &index); void pageSelected(int page); void searchResultSelected(const QModelIndex ¤t, 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();
Das eigentliche Layout des Hauptfensters wird in einer .ui
Datei festgelegt. Die Widgets und Aktionen sind zur Laufzeit in der Membervariablen ui
verfügbar.
void on_actionFindNext_triggered(); void on_actionFindPrevious_triggered(); private: Ui::MainWindow *ui;
Die Variable m_zoomSelector
enthält den Zoom-Selektor und die Variable m_pageSelector
enthält den Seiten-Selektor. Die Variable m_document
ist eine Instanz der Klasse QPdfDocument, die das PDF-Dokument enthält.
ZoomSelector *m_zoomSelector; QPdfPageSelector *m_pageSelector; QPdfSearchModel *m_searchModel; QLineEdit *m_searchField; QFileDialog *m_fileDialog = nullptr; QPdfDocument *m_document; };
Die eigentliche Einrichtung der verschiedenen Objekte wird im MainWindow-Konstruktor vorgenommen:
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)) {
Der Konstruktor ruft zunächst setupUi()
auf, um den größten Teil des Hauptfensters gemäß der UI-Datei zu konstruieren. Die Zoom- und Seitenwahlschalter müssen der Symbolleiste über QToolBar::insertWidget() hinzugefügt werden, da dies in einer UI-Datei nicht möglich ist:
ui->setupUi(this); m_zoomSelector->setMaximumWidth(150); ui->mainToolBar->insertWidget(ui->actionZoom_In, m_zoomSelector); ui->mainToolBar->insertWidget(ui->actionForward, m_pageSelector);
Wir verbinden die entsprechenden Signale mit der Spinbox für die Seitenauswahl und den Schaltflächen für das Zurück- und Vorblättern im Browser-Stil:
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);
Wir verbinden die zoomModeChanged
und zoomFactor
geänderten Signale der PDF-Ansicht mit den Funktionen, die den Zoom-Selektor zurücksetzen:
connect(m_zoomSelector, &ZoomSelector::zoomModeChanged, ui->pdfView, &QPdfView::setZoomMode); connect(m_zoomSelector, &ZoomSelector::zoomFactorChanged, ui->pdfView, &QPdfView::setZoomFactor); m_zoomSelector->reset();
Dann laden wir das PDF-Dokument in den Viewer:
... ui->pdfView->setSearchModel(m_searchModel);
Schließlich verbinden wir das Signal zoomFactorChanged
mit der Funktion, die den Wert des Zoom-Selektors setzt:
ui->searchToolBar->insertWidget(ui->actionFindPrevious, m_searchField); connect(new QShortcut(QKeySequence::Find, this), &QShortcut::activated, this, [this]() { m_searchField->setFocus(Qt::ShortcutFocusReason); });
Dateien und Attribute
© 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.