diff options
Diffstat (limited to 'examples/widgets/pdfviewer/mainwindow.cpp')
-rw-r--r-- | examples/widgets/pdfviewer/mainwindow.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/examples/widgets/pdfviewer/mainwindow.cpp b/examples/widgets/pdfviewer/mainwindow.cpp index e5b29edfd..df0c5a366 100644 --- a/examples/widgets/pdfviewer/mainwindow.cpp +++ b/examples/widgets/pdfviewer/mainwindow.cpp @@ -2,10 +2,14 @@ #include "ui_mainwindow.h" #include <QFileDialog> +#include <QLineEdit> #include <QMessageBox> #include <QPdfDocument> +#include <QtMath> #include "sequentialpagewidget.h" +const qreal zoomMultiplier = qSqrt(2.0); + Q_LOGGING_CATEGORY(lcExample, "qt.examples.pdfviewer") MainWindow::MainWindow(QWidget *parent) @@ -13,12 +17,24 @@ MainWindow::MainWindow(QWidget *parent) , ui(new Ui::MainWindow) , m_doc(new QPdfDocument(this)) , m_pageWidget(new SequentialPageWidget(this)) + , m_zoomEdit(new QLineEdit(this)) + , m_pageEdit(new QLineEdit(this)) { ui->setupUi(this); m_pageWidget->setDocument(m_doc); 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())); } MainWindow::~MainWindow() @@ -47,6 +63,20 @@ void MainWindow::showingPageRange(int start, int 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::on_actionOpen_triggered() @@ -55,3 +85,47 @@ void MainWindow::on_actionOpen_triggered() if (toOpen.isValid()) open(toOpen); } + +void MainWindow::on_actionQuit_triggered() +{ + QApplication::quit(); +} + +void MainWindow::on_actionAbout_triggered() +{ + QMessageBox::about(this, tr("About PdfViewer"), + tr("An example using QPdfDocument")); +} + +void MainWindow::on_actionAbout_Qt_triggered() +{ + QMessageBox::aboutQt(this); +} + +void MainWindow::on_actionZoom_In_triggered() +{ + m_pageWidget->setZoom(m_pageWidget->zoom() * zoomMultiplier); +} + +void MainWindow::on_actionZoom_Out_triggered() +{ + m_pageWidget->setZoom(m_pageWidget->zoom() / zoomMultiplier); +} + +void MainWindow::on_actionGo_triggered() +{ + bool ok = false; + int page = m_pageEdit->text().toInt(&ok); + if (!ok) return; + ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(page)); +} + +void MainWindow::on_actionPrevious_Page_triggered() +{ + ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(m_pageWidget->topPageShowing() - 1)); +} + +void MainWindow::on_actionNext_Page_triggered() +{ + ui->scrollArea->ensureVisible(0, m_pageWidget->yForPage(m_pageWidget->bottomPageShowing() + 1)); +} |