PDFビューアウィジェット例
ページをスクロールできるウィジェットベースのPDFビューア。
PDF Viewerは、QPdfView クラスを使ってPDFドキュメントをレンダリングし、QPdfPageNavigator クラスを使ってそれらをナビゲートする方法を示します。
Qt Creator サンプル UI を作成し、それをコードに接続するために、 Designer を使用しました。こ れは コ ー ド に影響を与え ますので、 通常手で書 く も の と は多少異な る 可能性があ り ます。 Designer の使用方法の詳細については、Qt Widgets Qt Widgets Qt Widgets Designer Manualおよび :Qt Creator Creating a Qt Widget Based Application を参照してください。
例の実行
からサンプルを実行するには Qt Creatorからサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Exampleを参照してください。
メインウィンドウの作成
MainWindow クラスはQMainWindow クラスを継承します:
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow();
このクラスはセレクタのアクションにマッチするpublicとprivateスロットを宣言します:
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();
メイン・ウィンドウの実際のレイアウトは、.ui
ファイルで指定します。ウィジェットとアクションは、ui
メンバ変数で実行時に利用可能です。
void on_actionFindNext_triggered(); void on_actionFindPrevious_triggered(); private: Ui::MainWindow *ui;
m_zoomSelector
変数にはズーム・セレクタが格納され、m_pageSelector
にはページ・セレクタが格納されます。m_document
変数は、PDF文書を含むQPdfDocument クラスのインスタンスです。
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 ビ ュ ーのzoomModeChanged
とzoomFactor
の変更信号を、 ズーム セ レ ク タ を リ セ ッ ト す る 関数に接続 し ます:
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); });
ファイルと帰属
© 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.