翻譯|使用教程|編輯:龔雪|2024-02-20 14:14:12.373|閱讀 151 次
概述:本文將為大家介紹如何使用Qt Widget小部件創(chuàng)建文檔查看器,歡迎下載最新版組件體驗(yàn)~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt 是目前最先進(jìn)、最完整的跨平臺(tái)C++開(kāi)發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫(xiě),所有平臺(tái)無(wú)差別運(yùn)行,更提供了幾乎所有開(kāi)發(fā)過(guò)程中需要用到的工具。如今,Qt已被運(yùn)用于超過(guò)70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬(wàn)設(shè)備及應(yīng)用。
文檔查看器是一個(gè)顯示和打印JSON、文本和PDF文件的Widgets應(yīng)用程序。Document Viewer(文檔查看器)演示了如何使用帶有靜態(tài)和動(dòng)態(tài)工具欄、菜單和操作的QMainWindow,此外它還演示了基于小部件的應(yīng)用程序中的以下特性:
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
 
 
應(yīng)用程序及其主窗口是在main.cpp中構(gòu)造的,main()函數(shù)使用QCommandLineParser來(lái)處理命令行參數(shù)——help、version和一個(gè)可選的位置參數(shù)file。如果用戶在啟動(dòng)應(yīng)用程序時(shí)提供了文件的路徑,則主窗口將打開(kāi)該文件:
	
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類提供了一個(gè)帶有菜單、操作和工具欄的應(yīng)用程序屏幕,它可以打開(kāi)一個(gè)文件,自動(dòng)檢測(cè)其內(nèi)容類型。它還維護(hù)以前打開(kāi)的文件列表,在啟動(dòng)時(shí)使用來(lái)存儲(chǔ)和重新加載設(shè)置。MainWindow根據(jù)文件的內(nèi)容類型為打開(kāi)的文件創(chuàng)建一個(gè)合適的查看器,并提供打印文檔的支持。
MainWindow的構(gòu)造函數(shù)初始化Qt Designer中創(chuàng)建的用戶界面,mainwindow.ui文件在左側(cè)提供了一個(gè)QTabWidget,顯示書(shū)簽和縮略圖,在右側(cè)有一個(gè),用于查看文件內(nèi)容。
ViewerFactory類管理已知文件類型的查看器,這些查看器是作為插件實(shí)現(xiàn)的。當(dāng)ViewerFactory的實(shí)例被創(chuàng)建時(shí),指向視圖區(qū)域和主窗口的指針被傳遞給構(gòu)造函數(shù):
m_factory.reset(new ViewerFactory(ui->viewArea, this));
ViewerFactory在構(gòu)建時(shí)加載所有可用的插件,它提供了一個(gè)公共API來(lái)查詢加載的插件、它們的名稱和支持的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()函數(shù)返回一個(gè)指向插件的指針,用于打開(kāi)作為參數(shù)傳遞的QFile:
m_viewer = m_factory->viewer(file);
如果應(yīng)用程序設(shè)置包含查看器的部分,則將其傳遞給查看器的虛擬restoreState()函數(shù):
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);
}
然后將標(biāo)準(zhǔn)UI資產(chǎn)傳遞給查看器,并設(shè)置主滾動(dòng)區(qū)域來(lái)顯示查看器的顯示小部件:
m_viewer->initViewer(ui->actionBack, ui->actionForward, ui->menuHelp->menuAction(), ui->tabWidget); restoreViewerSettings(); ui->scrollArea->setWidget(m_viewer->widget()); return true; }
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)