「Qt Widget中文示例指南」如何实现文档查看器?(二)

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

文档查看器是一个显示和打印JSON、文本和PDF文件的Widgets应用程序。Document Viewer(文档查看器)演示了如何使用带有静态和动态工具栏、菜单和操作的QMainWindow,此外它还演示了基于小部件的应用程序中的以下特性:

  • 使用QSettings查询和保存用户参数,并管理以前打开的文件历史记录。
  • 控制光标悬停在小部件上时的操作。
  • 创建动态加载的插件。

在上文中(点击这里回顾>>)主要介绍了创建一个应用程序和主窗口的一些类,本文将继续介绍一些其他类,请持续关注哦~

点击获取Qt Widget组件下载(Q技术交流:166830288)

「Qt Widget中文示例指南」如何实现文档查看器?

创建一个应用程序和主窗口
AbstractViewer 类

AbstractViewer提供了一个通用的API来查看、保存和打印文档,可以查询文档和查看器的属性:

  • 文档有内容吗?
  • 修改过了吗?
  • 是否支持概览(缩略图或书签)?

AbstractViewer为派生类提供了受保护的方法,以便在主窗口上创建操作和菜单。为了在主窗口上显示这些资产,它们是主窗口的父类。

AbstractViewer负责删除和销毁它创建的UI资产,它继承自QObject来实现信号和插槽。

信号

void uiInitialized();

该信号在查看器接收到主窗口上有关UI资源的所有必要信息后发出。

void printingEnabledChanged(bool enabled);

该信号在启用或禁用文档打印时发出,这发生在成功加载新文档之后,或者,例如删除了所有内容之后。

void printStatusChanged(AbstractViewer::PrintStatus status);

在开始打印过程后,这个信号通知打印过程中的变化。

void documentLoaded(const QString &fileName);

此信号通知应用程序文档已成功加载。

TxtViewer类

TxtViewer是一个简单的文本查看器,继承自AbstractViewer,它支持编辑文本文件、复制/剪切和粘贴、打印和保存更改。

JsonViewer类

JsonViewer在QTreeView中显示JSON文件,在内部,它将文件的内容加载到QJsonDocument中,并使用它来使用JsonItemModel填充自定义树模型。

JSON查看器插件演示了如何实现继承自QAbstractItemModel的自定义项模型,JsonTreeItem类提供了一个基本的API,用于操作JSON数据并将其传播回底层的QJsonDocument。

JsonViewer使用文档的顶级对象作为导航的书签,其他节点(键和值)可以作为附加书签添加,也可以从书签列表中删除。QLineEdit用作在JSON树中导航的搜索字段。

PdfViewer类

PdfViewer类(和插件)是PDF Viewer小部件示例的分支,它演示了如何使用qscroll平滑地浏览文档。

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spy 是一款 Windows 平台上的工具,用于查看和调试其他应用程序的窗口和消息。在 Qt 中,可以使用 QWindow 类和 QEvent 类来实现类似的功能。下面是一个简单的示例代码,可以实现查看其他应用程序窗口的功能: ```cpp #include <QtWidgets> class WindowSpy : public QWidget { public: WindowSpy(QWidget *parent = nullptr) : QWidget(parent) { setWindowTitle("Window Spy"); setFixedSize(400, 300); QVBoxLayout *layout = new QVBoxLayout(this); QLabel *label = new QLabel("Click on a window to spy on it.", this); label->setAlignment(Qt::AlignCenter); layout->addWidget(label); m_textEdit = new QTextEdit(this); layout->addWidget(m_textEdit); // 安装事件过滤器,以便捕获鼠标点击事件 qApp->installEventFilter(this); } protected: bool eventFilter(QObject *obj, QEvent *event) override { if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); // 获取鼠标点击的窗口 QWidget *widget = QApplication::widgetAt(mouseEvent->globalPos()); if (widget) { // 获取窗口信息并显示 QString info = QString("Window: %1\nClass: %2\n").arg(widget->windowTitle(), widget->metaObject()->className()); m_textEdit->setText(info); } } return QWidget::eventFilter(obj, event); } private: QTextEdit *m_textEdit; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); WindowSpy windowSpy; windowSpy.show(); return app.exec(); } ``` 这个示例代码中,我们创建了一个窗口,当用户点击其他应用程序的窗口时,会显示该窗口的信息,包括窗口名称和类名。使用 `QApplication::widgetAt()` 函数可以获取鼠标点击的窗口,然后使用 `metaObject()` 函数获取窗口的类名。如果需要进一步查看窗口的消息,可以使用 `QWindow` 类和 `QEvent` 类来实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值