PDF 뷰어 위젯 예제
페이지를 스크롤할 수 있는 위젯 기반 PDF 뷰어입니다.
PDF 뷰어는 QPdfView 클래스를 사용하여 PDF 문서를 렌더링하는 방법과 QPdfPageNavigator 클래스를 사용하여 문서를 탐색하는 방법을 보여줍니다.
Qt Creator 그리고 통합된 Qt Widgets Designer 을 사용하여 예제 UI를 만들고 코드에 연결했습니다. 이는 코드에 영향을 미치므로 일반적으로 손으로 작성하는 것과 다소 다를 수 있습니다. Qt Widgets Designer 사용에 대한 자세한 내용은 Qt Widgets Designer 매뉴얼 및 Qt Creator: Qt Widgets 기반 애플리케이션 만들기 를 참조하십시오.
예제 실행하기
에서 예제를 실행하려면 Qt Creator에서 Welcome 모드를 열고 Examples 에서 예제를 선택합니다. 자세한 내용은 예제 빌드 및 실행하기를 참조하세요.
메인 창 만들기
MainWindow 클래스는 QMainWindow 클래스를 상속합니다:
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow();
이 클래스는 선택기의 동작과 일치하는 공개 및 비공개 슬롯을 선언합니다:
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 파일에 따라 대부분의 메인 창을 구성합니다. 확대/축소 및 페이지 선택기는 UI 파일에서 수행할 수 없으므로 QToolBar::insertWidget()를 통해 도구 모음에 추가해야 합니다:
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.