PDFビューアウィジェット例
ページをスクロールできるウィジェットベースのPDFビューア。
PDF Viewerは、QPdfView クラスを使ってPDFドキュメントをレンダリングし、QPdfPageNavigator クラスを使ってそれらをナビゲートする方法を示しています。
サンプルUIの作成とコードへの接続には、Qt Creatorと統合されたQt Widgets Designerを使用しました。これはコードに影響し、通常手で書くものとは多少異なるかもしれません。Qt Widgets Designer の使用方法については、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); });
ファイルと帰属
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。