Qt6之模型和视图

这篇具有很好参考价值的文章主要介绍了Qt6之模型和视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MVC是Model-View-Controller,即模型(Model)、视图(View)、控制器(Controller)。

模型:用于管理数据;

视图:就是呈现在用户面前的界面外观,视图负责把模型中的数据显示给用户;

控制器:用于处理用户在用户界面的输入;

MVC本质上目的是数据处理和显示分离,以提高灵活性和重用性。

1、Qt引入新模型/视图结构

Qt 把视图和控制器组合在一起,从而形成模型/视图结构,如下图:

Qt6之模型和视图,Qt6,qt

委托(也称代理)即Delegate,用于在Qt模型/视图架构中处理特定类型的数据。委托提供了一种方便的方法来定制特定类型的数据的显示和编辑,使得开发人员能够更好地控制数据的外观和行为。

至此,诞生新结构,MVD即Model-View-Delegate,由于模型负责组织数据,而视图负责显示数据,所以当用户想修改显示的数据时,就要通过视图中的委托来完成

2、数据与模型

数据不一定需要存储在模型中,数据也可以存储在文件、数据库等其他地方,存储的数据不一定拥有一种数据结构,但是模型通常会把这些数据组织成一种数据结构(比如列表(list)结构、树形(tree 结构等),这种结构只是逻辑上的结构,数据本身不一定拥有这种结构,然后视图根据模型提供的逻辑结构显示数据,比如列表视图(QListView)可以显示把数据组织成列表结构的模型 (QStandardItemModel 模型实现了该种结构)中的数据;

当然,也可以使用列表视图显示组织为树形结构的数据,但这样做需要做一些比较麻烦的处理才能正确显示。

3、MVD通信方式

使用Qt的信号和槽通信

4、MVD示例:

Qt6之模型和视图,Qt6,qt

//上图红色为标头--------------------------------------视图

//蓝色所指为网格线-----------------------------------视图

//上图绿色方框内为委托某个组件在编辑单元格内容---------------委托

模型:表格中的数据都是由模型管理的;

视图:负责管理水平/垂直标头、滚动、对数据项的 选择、网格线等;

委托:负责单元格(数据项)的 绘制,以及编辑单元格的内容;

5、MVD常见类

5.1模型:

Qt 使用抽象类 QAbstractItemModel 来描述模型,所有的模型都是通过子类化该抽像类而实现的。

  • QStringListModel:用于存储 QString 项目的列表。
  • QStandardItemModel:该模型可以被当作列表模型、表格模型、树模型来使用。
  • QFileSystemModel:该模型提供本地文件系统中的文件和目录信息,模型本身没有任何的数据项目。
  • QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel 与数据库有关。 

5.2视图:

Qt 使用抽象类 QAbstractItemView 来描述视图,所有的视图都是通过子类化该抽像类而实现的。

  • QListView(列表视图)
  •  QTableView(表格视图)
  • QTreeView(树视图)等

5.3委托:
Qt 使用抽象类 QAbstractItemDelegate 来描述委托。

Qt 实现了两个委托类QStyledItemDelegate 和 QItemDelegate,这两个委托之中只能使用其中一个,其区别在 于 QItemDelegate 总是使用一种默认的样式绘制数据项,而 QStyledItemDelegate 使用当前的样式来绘制数据项,通常使用的是 QStyledItemDelegate。

6、代码演示 

Qt6之模型和视图,Qt6,qt

 文章来源地址https://www.toymoban.com/news/detail-608014.html

QStandardItemModel model(3,3,this); //创建一个 3 行 3 列的表格结构的模型
 QTableView v1;                     //创建一个表格视图
                                    //设置模型的数据,使用索引的形式设置每个数据项的值
 model.setData(model.index(0,0),123);
 model.setData(model.index(0,1),222);
 model.setData(model.index(0,2),333);
 model.setData(model.index(1,0),444);
 model.setData(model.index(1,1),555);
 model.setData(model.index(1,2),666);
 model.setData(model.index(2,0),777);
 model.setData(model.index(2,1),888);
 model.setData(model.index(2,2),999);
 v1.setModel(&model);                //设置视图 v1 的模型
 v1.show();                          //显示视图

到了这里,关于Qt6之模型和视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt6】列表模型——几个便捷的列表类型

    前面一些文章,老周简单介绍了在Qt 中使用列表模型的方法。很明显,使用 Item Model 在许多时候还是挺麻烦的——要先建模型,再放数据,最后才构建视图。为了简化这些骚操作,Qt 提供了几个便捷类。今天咱们逐个看看。  这厮对应的 List View,用来显示简单的列表。要添加

    2024年02月08日
    浏览(39)
  • 【Qt之模型视图】1. 模型和视图架构

    MVC(Model-View-Control)是一种源自 Smalltalk 的设计模式,通常用于构建用户界面。 MVC由三种类型的对象组成。模型是应用对象,用来表示数据;视图是模型的用户界面,用来显示数据;控制器定义了用户界面对用户输入的反应方式。在MVC之前,用户界面设计往往将这些对象混为

    2024年01月18日
    浏览(55)
  • Qt - 模型视图

    模型/视图结构将数据存储和界面展示分离,分别用不同的类实现 模型:存储数据 视图:界面上的视图组件显示模型中的数据;在视图组件里修改的数据会被自动保存在模型中 源数据 内存中的一个字符串列表 磁盘文件系统结构 数据库的一个数据表 sql查询结果 视图(视图组

    2024年02月12日
    浏览(33)
  • Qt 模型(model)/视图(view)详解

      以下所有代码均可在Qt安装目录:Qt安装目录/examples中找到   在没有使用模型/视图的应用程序中,一个标准的表格组件是一个用户可以修改的数据元素的二维数组。表格组件能够通过读写表格组件提供的数据元素来集成到程序中。这种方法在大多数应用中都很直观而且

    2024年01月16日
    浏览(44)
  • QT 视图(view)模型(model)汇总

    UI界面 一般来说,设置视图模型的对应关系时,会给QTableView设置两个模型,一个是 ui文件  mainwindow.h mainwindow.cpp tdialogheader.h tdialogheader.cpp 后续代码就不贴了,需要联系 

    2024年02月15日
    浏览(40)
  • 【Qt之模型视图】2. 模型类及QModelIndex模型索引、自定义模型

    在模型/视图体系结构中,模型提供了一个标准接口,视图和委托使用该接口访问数据。在Qt中,标准接口是由QAbstractItemModel类定义的。无论数据项如何存储在任何底层数据结构中,QAbstractItemModel的所有子类都会以层次结构来表示数据,这个结构包含了数据项表。视图使用约定

    2024年01月19日
    浏览(52)
  • QT6 for android 安装教程记录(版本Qt6.5.2)

    本文记录首次安装QT for andriod的详细记录。 网上的信息和资料非常多,收集和整理以及遇到的问题也各异,对新手首次接触相关开发和部署环境并不是清晰,因此,特将相关详细配置记录。 首先,开发QT for andriod 不建议使用QT5.15的版本,因为该版本不能区分相关的CPU架构,而

    2024年02月03日
    浏览(50)
  • Qt6中使用Qt Charts

     官方文档:Qt Charts 6.5.2           如果你是使用  CMake 构建的,则应在  CMakeLists.txt  中添加如下两行代码:         其中  mytarget 为你的项目名称。一共2处改动,如下截图:         改完之后,你在 .cpp 文件导入库名,就可以开始画图了。         关于怎么画出一个可

    2024年02月09日
    浏览(38)
  • 【QT教程】QT6物联网应用

    QT6物联网应用 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视

    2024年04月25日
    浏览(36)
  • Qt5和Qt6的区别

    Qt4和Qt5的区别 之前有做过将项目从QT4迁移到QT5的操作,所以写了一篇QT4和Qt5的区别。在最近这一年接触过Qt6后,所以想要介绍一下Qt6和Qt5的区别,通过自己的试用感受和结合网上各路大佬的点拨,有了一个大概的了解。 各稳定版本: Qt4: 4.8.7 4.X 系列终结版本 Qt5 : 5.6 LTS 长期

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包