news 2026/7/18 10:01:20

「Qt Widget中文示例指南」如何实现一个快捷编辑器(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
「Qt Widget中文示例指南」如何实现一个快捷编辑器(一)

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

快捷编辑器示例展示了如何创建一个基本的读写层次模型,来与Qt的标准视图和QKeySequenceEdit类一起使用。

Qt的模型/视图架构为视图提供了一种标准的方式来操作数据源中的信息,使用数据的抽象模型来简化和标准化访问数据的方式。快捷编辑器模型将操作表示为项目树,并允许视图通过基于索引的系统访问此数据。更一般地说,可以使用模型以树结构的形式表示数据,方法是允许每个项作为子项表的父项。

设计及概念

我们用来表示数据结构的数据结构采用由ShortcutEditorModelItem对象构建的树表单,每个ShortcutEditorModelItem表示树视图中的一个项,并包含两列数据。

快捷编辑器结构

数据使用ShortcutEditorModelItem对象存储在模型内部,这些对象在基于指针的树结构中链接在一起。通常每个ShortcutEditorModelItem都有一个父项,并且可以有许多子项。但是树结构中的根项没有父项,也不会在模型之外被引用。

每个ShortcutEditorModelItem都包含有关其在树结构中的位置的信息,它可以返回父项及其行号。有了这些随时可用的信息,就可以更容易地实现模型。

由于树视图中的每个项通常包含几列数据(在本例中是一个名称和一个快捷方式),因此将这些信息存储在每个项中是很自然的。为简单起见,我们将使用一个QVariant对象列表来存储项目中每一列的数据。

使用基于指针的树结构意味着,当将模型索引传递给视图时,我们可以记录索引中相应项的地址(参见QAbstractItemModel::createIndex()),并稍后使用QModelIndex::internalPointer()检索它。这使得编写模型更容易,并确保引用同一项的所有模型索引具有相同的内部数据指针。

有了适当的数据结构,我们就可以用最少的额外代码创建树模型,为其他组件提供模型索引和数据。

ShortcutEditorModelItem类定义

ShortcutEditorModelItem类定义如下:

这个类是一个基本的c++类,它不继承QObject,也不提供信号和插槽。它用于保存qvariables列表,其中包含列数据和关于其在树结构中的位置的信息。这些函数提供以下特性:

  • appendChildItem()用于在模型首次构造时添加数据,在正常使用期间不会使用。
  • child()和childCount()函数允许模型获取任何子项的信息。
  • 与项目相关联的列数信息由columnCount()提供,每列中的数据可以通过data()函数获得。
  • row()和parent()函数用于获取项的行号和父项。

父项和列数据存储在parentItem和itemData私有成员变量中,childItems变量包含一个指向该项自身子项的指针列表。

ShortcutEditorModel类定义

ShortcutEditorModel类定义如下:

class ShortcutEditorModel : public QAbstractItemModel { Q_OBJECT class ShortcutEditorModelItem { public: explicit ShortcutEditorModelItem(const QList<QVariant> &data, ShortcutEditorModelItem *parentItem = nullptr); ~ShortcutEditorModelItem(); void appendChild(ShortcutEditorModelItem *child); ShortcutEditorModelItem *child(int row) const; int childCount() const; int columnCount() const; QVariant data(int column) const; int row() const; ShortcutEditorModelItem *parentItem() const; QAction *action() const; private: QList<ShortcutEditorModelItem *> m_childItems; QList<QVariant> m_itemData; ShortcutEditorModelItem *m_parentItem; }; public: explicit ShortcutEditorModel(QObject *parent = nullptr); ~ShortcutEditorModel() override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &index = QModelIndex()) const override; int columnCount(const QModelIndex &index = QModelIndex()) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; void setActions(); private: void setupModelData(ShortcutEditorModelItem *parent); ShortcutEditorModelItem *m_rootItem; };

这个类类似于提供读写模型的QAbstractItemModel的大多数其他子类,只有构造函数的表单和setupModelData()函数是特定于这个模型的。此外,我们还提供了一个析构函数,以便在模型被销毁时进行清理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 10:01:08

WPF应用实战开发指南 - 如何结合阿里矢量图标库使用Geometry图标?

在SqlSugar开发框架的WPF应用中&#xff0c;有时候需要在按钮或者其他界面元素上使用一些图标&#xff0c;框架中我们可以使用 lepoco/wpfui 项目的图标库&#xff0c;也可以使用Font-Awesome-WPF 图标库&#xff0c;另外如果喜欢阿里矢量图标库的&#xff0c;也可以通过使用Ge…

作者头像 李华
网站建设 2026/7/18 10:01:01

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件&#xff0c;这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理应用…

作者头像 李华
网站建设 2026/7/18 10:01:00

CANN/Ascend C TPipe-TQue编程原理

TPipe-TQue编程原理介绍 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https:/…

作者头像 李华
网站建设 2026/7/18 9:59:33

TIDE与深度学习框架集成:如何在PyTorch/TensorFlow项目中应用

TIDE与深度学习框架集成&#xff1a;如何在PyTorch/TensorFlow项目中应用 【免费下载链接】tide A General Toolbox for Identifying Object Detection Errors 项目地址: https://gitcode.com/gh_mirrors/tide1/tide TIDE&#xff08;A General Toolbox for Identifying…

作者头像 李华
网站建设 2026/7/18 9:59:16

如何快速搭建农业智能问答系统:Agriculture_KnowledgeGraph全指南

如何快速搭建农业智能问答系统&#xff1a;Agriculture_KnowledgeGraph全指南 农业知识图谱(Agriculture_KnowledgeGraph)是一款专为农业领域打造的智能问答系统&#xff0c;集成了信息检索、命名实体识别、关系抽取和辅助决策功能&#xff0c;帮助农业从业者快速获取精准的农…

作者头像 李华
网站建设 2026/7/18 9:58:52

日程安排组件DHTMLX Scheduler v7.0新版亮点 - 拥有多种全新的主题

DHTMLX Scheduler 是一个类似于Google日历的JavaScript日程安排控件&#xff0c;日历事件通过Ajax动态加载&#xff0c;支持通过拖放功能调整事件日期和时间&#xff0c;事件可以按天、周、月三个种视图显示。备受关注的DHTMLX Scheduler 7.0版本日前正式发布了&#xff0c;如果…

作者头像 李华