PDFビューアウィジェット例
ページをスクロールできるウィジェットベースのPDFビューア。
PDF Viewerは、QPdfView クラスを使ってPDFドキュメントをレンダリングし、QPdfPageNavigator クラスを使ってそれらをナビゲートする方法を示します。
Qt Creator サンプル UI を作成し、それをコードに接続するために、 Designer を使用しました。こ れは コ ー ド に影響を与え ますので、 通常手で書 く も の と は多少異な る 可能性があ り ます。 Designer の使用方法の詳細については、Qt Widgets Qt Widgets Qt Widgets Designer Manualおよび : Creating a Qt Widget Based Application を参照してください。Qt Creator
例の実行
からサンプルを実行するには Qt Creatorからサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Qt Creator:Tutorialを参照してください:ビルドと実行を参照してください。
メイン・ウィンドウの作成
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.