翻譯|使用教程|編輯:龔雪|2024-02-20 14:14:12.373|閱讀 134 次
概述:本文將為大家介紹如何使用Qt Widget小部件創建文檔查看器,歡迎下載最新版組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用于超過70個行業、數千家企業,支持數百萬設備及應用。
文檔查看器是一個顯示和打印JSON、文本和PDF文件的Widgets應用程序。Document Viewer(文檔查看器)演示了如何使用帶有靜態和動態工具欄、菜單和操作的QMainWindow,此外它還演示了基于小部件的應用程序中的以下特性:
Qt技術交流群:166830288 歡迎一起進群討論
應用程序及其主窗口是在main.cpp中構造的,main()函數使用QCommandLineParser來處理命令行參數——help、version和一個可選的位置參數file。如果用戶在啟動應用程序時提供了文件的路徑,則主窗口將打開該文件:
int main(int argc, char *argv[]) { QApplication app(argc, argv); QCoreApplication::setOrganizationName("QtProject"_L1); QCoreApplication::setApplicationName("DocumentViewer"_L1); QCoreApplication::setApplicationVersion("1.0"_L1); QCommandLineParser parser; parser.setApplicationDescription(QApplication::translate("main", "A viewer for JSON, PDF and text files")); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("File"_L1, QApplication::translate("main", "JSON, PDF or text file to open")); parser.process(app); const QStringList &positionalArguments = parser.positionalArguments(); const QString &fileName = (positionalArguments.count() > 0) ? positionalArguments.at(0) : QString(); MainWindow w; w.show(); if (!fileName.isEmpty()) w.openFile(fileName); return app.exec(); }
MainWindow類提供了一個帶有菜單、操作和工具欄的應用程序屏幕,它可以打開一個文件,自動檢測其內容類型。它還維護以前打開的文件列表,在啟動時使用來存儲和重新加載設置。MainWindow根據文件的內容類型為打開的文件創建一個合適的查看器,并提供打印文檔的支持。
MainWindow的構造函數初始化Qt Designer中創建的用戶界面,mainwindow.ui文件在左側提供了一個QTabWidget,顯示書簽和縮略圖,在右側有一個,用于查看文件內容。
ViewerFactory類管理已知文件類型的查看器,這些查看器是作為插件實現的。當ViewerFactory的實例被創建時,指向視圖區域和主窗口的指針被傳遞給構造函數:
m_factory.reset(new ViewerFactory(ui->viewArea, this));
ViewerFactory在構建時加載所有可用的插件,它提供了一個公共API來查詢加載的插件、它們的名稱和支持的MIME類型:
using ViewerList = QList<AbstractViewer *>; QStringList viewerNames(bool showDefault = false) const; ViewerList viewers() const; AbstractViewer *findViewer(const QString &viewerName) const; AbstractViewer *defaultViewer() const; QStringList supportedMimeTypes() const;
viewer()函數返回一個指向插件的指針,用于打開作為參數傳遞的QFile:
m_viewer = m_factory->viewer(file);
如果應用程序設置包含查看器的部分,則將其傳遞給查看器的虛擬restoreState()函數:
void MainWindow::restoreViewerSettings() { if (!m_viewer) return; QSettings settings; settings.beginGroup(settingsViewers); QByteArray viewerSettings = settings.value(m_viewer->viewerName(), QByteArray()).toByteArray(); settings.endGroup(); if (!viewerSettings.isEmpty()) m_viewer->restoreState(viewerSettings); }
然后將標準UI資產傳遞給查看器,并設置主滾動區域來顯示查看器的顯示小部件:
m_viewer->initViewer(ui->actionBack, ui->actionForward, ui->menuHelp->menuAction(), ui->tabWidget); restoreViewerSettings(); ui->scrollArea->setWidget(m_viewer->widget()); return true; }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網