diff options
Diffstat (limited to 'examples/pdfwidgets/pdfviewer/mainwindow.cpp')
-rw-r--r-- | examples/pdfwidgets/pdfviewer/mainwindow.cpp | 88 |
1 files changed, 30 insertions, 58 deletions
diff --git a/examples/pdfwidgets/pdfviewer/mainwindow.cpp b/examples/pdfwidgets/pdfviewer/mainwindow.cpp index fd2656305..5f9bf389f 100644 --- a/examples/pdfwidgets/pdfviewer/mainwindow.cpp +++ b/examples/pdfwidgets/pdfviewer/mainwindow.cpp @@ -37,14 +37,14 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include "sequentialpagewidget.h" +#include "pageselector.h" +#include "zoomselector.h" #include <QFileDialog> -#include <QLineEdit> #include <QMessageBox> #include <QPdfBookmarkModel> #include <QPdfDocument> -#include <QScroller> +#include <QPdfPageNavigation> #include <QtMath> const qreal zoomMultiplier = qSqrt(2.0); @@ -54,27 +54,23 @@ Q_LOGGING_CATEGORY(lcExample, "qt.examples.pdfviewer") MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) - , m_pageWidget(new SequentialPageWidget(this)) - , m_zoomEdit(new QLineEdit(this)) - , m_pageEdit(new QLineEdit(this)) + , m_zoomSelector(new ZoomSelector(this)) + , m_pageSelector(new PageSelector(this)) , m_document(new QPdfDocument(this)) { ui->setupUi(this); - ui->scrollArea->setWidget(m_pageWidget); - m_zoomEdit->setMaximumWidth(50); - m_zoomEdit->setAlignment(Qt::AlignHCenter); - ui->mainToolBar->insertWidget(ui->actionZoom_In, m_zoomEdit); - m_pageEdit->setMaximumWidth(50); - m_pageEdit->setAlignment(Qt::AlignHCenter); - ui->mainToolBar->insertWidget(ui->actionGo, m_pageEdit); - connect(m_pageWidget, SIGNAL(showingPageRange(int,int)), - this, SLOT(showingPageRange(int,int)), Qt::QueuedConnection); - connect(m_pageWidget, SIGNAL(zoomChanged(qreal)), - this, SLOT(zoomChanged(qreal))); - connect(m_zoomEdit, SIGNAL(returnPressed()), this, SLOT(zoomEdited())); - connect(m_pageEdit, SIGNAL(returnPressed()), this, SLOT(on_actionGo_triggered())); - - QScroller::grabGesture(ui->scrollArea); + + m_zoomSelector->setMaximumWidth(150); + ui->mainToolBar->insertWidget(ui->actionZoom_In, m_zoomSelector); + + m_pageSelector->setMaximumWidth(150); + ui->mainToolBar->addWidget(m_pageSelector); + + m_pageSelector->setPageNavigation(ui->pdfView->pageNavigation()); + + connect(m_zoomSelector, &ZoomSelector::zoomModeChanged, ui->pdfView, &QPdfView::setZoomMode); + connect(m_zoomSelector, &ZoomSelector::zoomFactorChanged, ui->pdfView, &QPdfView::setZoomFactor); + m_zoomSelector->reset(); QPdfBookmarkModel *bookmarkModel = new QPdfBookmarkModel(this); bookmarkModel->setDocument(m_document); @@ -84,7 +80,10 @@ MainWindow::MainWindow(QWidget *parent) ui->tabWidget->setTabEnabled(1, false); // disable 'Pages' tab for now - m_pageWidget->setDocument(m_document); + ui->pdfView->setDocument(m_document); + + connect(ui->pdfView, &QPdfView::zoomFactorChanged, + m_zoomSelector, &ZoomSelector::setZoomFactor); } MainWindow::~MainWindow() @@ -103,30 +102,6 @@ void MainWindow::open(const QUrl &docLocation) QMessageBox::critical(this, tr("Failed to open"), tr("%1 is not a valid local file").arg(docLocation.toString())); } qCDebug(lcExample) << docLocation; - ui->scrollArea->ensureVisible(0, 0, 0, 0); -} - -void MainWindow::showingPageRange(int start, int end) -{ - ui->statusBar->clearMessage(); - if (start == end) - ui->statusBar->showMessage(tr("showing page %1").arg(start)); - else - ui->statusBar->showMessage(tr("showing pages %1 to %2").arg(start).arg(end)); - m_pageEdit->setText(QString::number(end)); -} - -void MainWindow::zoomChanged(qreal factor) -{ - m_zoomEdit->setText(tr("%1%").arg(factor * 100., 0, 'f', 0)); -} - -void MainWindow::zoomEdited() -{ - bool ok = false; - qreal factor = m_zoomEdit->text().remove(QChar('%')).toDouble(&ok); - if (ok) - m_pageWidget->setZoom(factor / 100.); } void MainWindow::bookmarkSelected(const QModelIndex &index) @@ -135,7 +110,7 @@ void MainWindow::bookmarkSelected(const QModelIndex &index) return; const int page = index.data(QPdfBookmarkModel::PageNumberRole).toInt(); - ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(page)); + ui->pdfView->pageNavigation()->setCurrentPage(page); } void MainWindow::on_actionOpen_triggered() @@ -163,28 +138,25 @@ void MainWindow::on_actionAbout_Qt_triggered() void MainWindow::on_actionZoom_In_triggered() { - m_pageWidget->setZoom(m_pageWidget->zoom() * zoomMultiplier); + ui->pdfView->setZoomFactor(ui->pdfView->zoomFactor() * zoomMultiplier); } void MainWindow::on_actionZoom_Out_triggered() { - m_pageWidget->setZoom(m_pageWidget->zoom() / zoomMultiplier); + ui->pdfView->setZoomFactor(ui->pdfView->zoomFactor() / zoomMultiplier); } -void MainWindow::on_actionGo_triggered() +void MainWindow::on_actionPrevious_Page_triggered() { - bool ok = false; - int page = m_pageEdit->text().toInt(&ok); - if (!ok) return; - ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(page)); + ui->pdfView->pageNavigation()->goToPreviousPage(); } -void MainWindow::on_actionPrevious_Page_triggered() +void MainWindow::on_actionNext_Page_triggered() { - ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(m_pageWidget->topPageShowing() - 1)); + ui->pdfView->pageNavigation()->goToNextPage(); } -void MainWindow::on_actionNext_Page_triggered() +void MainWindow::on_actionContinuous_triggered() { - ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(m_pageWidget->bottomPageShowing() + 1)); + ui->pdfView->setPageMode(ui->actionContinuous->isChecked() ? QPdfView::MultiPage : QPdfView::SinglePage); } |