网站优化外包,杭州seo排名优化,最新一轮阳性症状,免费发链接的网站文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台
项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake
2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。
QPdfDocument 类加载P… 文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台
项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake
2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。
QPdfDocument 类加载PDF文档并根据QPdfDocumentRenderOptions类提供的选项从中呈现页面。QPdfPageRenderer 类管理一个队列该队列收集所有呈现请求。QPdfPageNavigator 类处理通过PDF文档的导航。QPdfSearchModel 类搜索字符串并保存搜索结果。QPdfBookmarkModel 类保存目录如果存在。QPdfLinkModel 保存有关页面上超链接的信息。QPdfView 小部件是一个完整的PDF查看器 PDF Viewer Widget Example 示例展示了如何使用它。 Qt Quick 部分略过不提 如果只需要呈现页面图像而不需要文本选择、搜索和导航等功能则该模块包含一个QImageIOHandler插件该插件将PDF视为可伸缩的图像格式类似于SVG。您可以简单地使用Image并将currentFrame属性设置为希望显示的页面索引。如果PDF文件不呈现其自己的背景则图像具有透明背景。
3. cmake 使用模块 find_package(Qt6 REQUIRED COMPONENTS Pdf PdfWidgets)target_link_libraries(mytarget Qt6::Pdf Qt6::PdfWidgets)
4. 许可证
Qt PDF在Qt公司的商业许可下可用。此外它在GNU较宽松通用公共许可证(版本3)或GNU通用公共许可证(版本2)下可用。有关此模块的更多详细信息请参阅Qt PDF许可。
5. 简单示例 5.1 CMakeLists.txt
#CMakeLists.txtcmake_minimum_required(VERSION 3.5)project(QtPDF VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets PdfWidgets Pdf)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets PdfWidgets Pdf)set(PROJECT_SOURCESmain.cpp
)if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)qt_add_executable(QtPDFMANUAL_FINALIZATION${PROJECT_SOURCES})
# Define target properties for Android with Qt 6 as:
# set_property(TARGET QtPDF APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()if(ANDROID)add_library(QtPDF SHARED${PROJECT_SOURCES})
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android)else()add_executable(QtPDF${PROJECT_SOURCES})endif()
endif()target_link_libraries(QtPDF PRIVATEQt${QT_VERSION_MAJOR}::WidgetsQt${QT_VERSION_MAJOR}::PdfWidgetsQt${QT_VERSION_MAJOR}::Pdf
)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.QtPDF)
endif()
set_target_properties(QtPDF PROPERTIES${BUNDLE_ID_OPTION}MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)include(GNUInstallDirs)
install(TARGETS QtPDFBUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)if(QT_VERSION_MAJOR EQUAL 6)qt_finalize_executable(QtPDF)
endif()
5.2 main.cpp
#include QtWidgets
#include QtPdfWidgets
#include qout.hppint main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;// 分割器auto splitter new QSplitter(w);w.setCentralWidget(splitter);// PDF查看器控件auto *pdf_view new QPdfView(splitter);pdf_view-setPageMode(QPdfView::PageMode::MultiPage); // 多页浏览模式pdf_view-setZoomMode(QPdfView::ZoomMode::FitToWidth);// 适合宽度模式// QPdfDocument类 加载PDF文档并呈现页面auto pdf_doc new QPdfDocument(pdf_view);pdf_view-setDocument(pdf_doc);pdf_doc-load(E:/00_Download/Compressed/现代 C 教程高速上手 C 11_14_17_20.pdf);// QPdfBookmarkModel类 保存PDF文档中的链接树(锚点)例如目录。QPdfBookmarkModel *pdfBookmarkModel new QPdfBookmarkModel(splitter);pdfBookmarkModel-setDocument(pdf_doc);// 使用TreeView 来显示目录auto bookMarkTreeView new QTreeView(splitter);QFont serifFont(Times, 10, QFont::Normal);bookMarkTreeView-setModel(pdfBookmarkModel);bookMarkTreeView-setFont(serifFont);bookMarkTreeView-header()-hide();splitter-addWidget(bookMarkTreeView);splitter-addWidget(pdf_view);splitter-setStretchFactor(1,1); // pdf_view 获取最大的可用空间w.showMaximized();// 打印书签的角色名称qout pdfBookmarkModel-roleNames();qout pdfBookmarkModel-rowCount() pdfBookmarkModel-columnCount();auto index pdfBookmarkModel-index(0,0);qout index;qout pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Title);qout pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Level);qout pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Page);qout pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Location);qout pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Zoom);QObject::connect(bookMarkTreeView,QTreeView::clicked,bookMarkTreeView,[pdf_view,pdfBookmarkModel](const QModelIndex index){QPdfPageNavigator* nav pdf_view-pageNavigator();auto page pdfBookmarkModel-data(index,(int)QPdfBookmarkModel::Role::Page).toInt();nav-jump(page, {}, nav-currentZoom());});return a.exec();
}6. 总结
Qt pdf 模块 底层使用的是PDFium库, 不知道是不是PDFium库的版本问题,在解析书签目录的时候,还是有点问题, 没有location,所以没必要深究这个模块,不是太理想