Qt - 模型视图

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

模型/视图

概念

模型/视图结构将数据存储和界面展示分离,分别用不同的类实现

  • 模型:存储数据
  • 视图:界面上的视图组件显示模型中的数据;在视图组件里修改的数据会被自动保存在模型中

Qt - 模型视图,qt,qt,数据库,oracle

  • 源数据

内存中的一个字符串列表
磁盘文件系统结构
数据库的一个数据表
sql查询结果

  • 视图(视图组件)

视图从模型获得数据然后将其显示在界面上 QListView QTreeView QTableView

  • 模型(数据模型)

模型与源数据通信,并为视图自检提供数据接口
模型从源数据提取需要的数据,用于视图组件进行显示和编辑
模型类 QStringListModel字符串列表模型类 QSqlTableModel数据库中数据表的模型类

  • 代理

在视图与模型之间交互操作时提供的临时编辑器
模型向视图提供数据是单向的,一般仅用于显示,当需要在视图上编辑数据时,代理会为编辑数据提供一个编辑器,这个编辑器获取模型的数据、接受用户编辑的数据后又将其提交给模型
(QTableView组件上双击一个单元格来编辑数据时,在单元格里就会出现一个QLineEdit组件,这个编辑框就是代理提供的临时编辑器)

  • 通讯方式

模型、视图、代理使用信号和槽进行通信
当源数据发生变化时,模型发射信号通知视图组件
当用户在界面上操作数据时,视图组件发射信号表示操作信息
在编辑数据时,代理会发射信号告知模型和视图组件编辑器的状态

模型

模型数据来源:

  • 内存数据(字符串列表等)
  • 二维表格型数据
  • 数据库中的数据表
    其他类、文件、数据库或任何数据源

一种模型数据可以用不同的视图组件来显示数据
界面与原始数据的交互是通过模型来完成的

QAbstractItemModel

所有基于项的模型类都是继承自QAbstractItemModel类
这个类定义了视图组件和代理存取数据的接口
模型只是在内存中临时存储数据
该抽象模型类不能直接用于创建实例对象,常用的模型类如下

// 继承关系
QAbstractItemModel
- QFileSystemModel                          // 用于表示计算机文件系统的模型类
- QAbstractListModel - QStringListModel     // 用于表示字符串列表数据的模型类
- QStandardItemModel                        // 标准的基于项的模型类,每个项是一个QStandardItem对象 
- QAbstractTableModel 
    - QSqlQueryModel                        // 用于表述数据库sql查询结果 
    - QSqlTableModel                        // 用于表述数据库的一个数据表的模型类

视图

  • QListView 用于显示单列的列表数据,一维数据
  • QTreeView 用于显示树状结构数据,树状结构数据
  • QTableView 用于显示表格数据,二维表格数据
  • QColumnView 用于多个QListView 显示树状结构数据
  • QUndoView …

xxxView / xxxWidget

xxxView 用于模型/视图结构,每一种视图组件需要相应的一种模型用于存储数据
xxxWidget是xxxView的子类,直接使用item来存储数据,称为视图类的便利类

视图组件的数据来源于模型
视图组件不存储模型
便利类为组件的每个节点或单元格创建一个项,用项存储数据 (QTableWidget这个便利类,表格的每个单元格关联一个QTableWidgetItem对象)
便利类没有模型,实际上是用项的方式代替模型的功能,将界面与数据进行绑定

便利类缺乏对大型数据源进行灵活处理的能力,只适用于小型数据的显示和编辑
视图组件则会根据模型的数据内容自动显示,有助于减少编程工作量,使用更灵活

// 继承关系
QAbstractItemView
- QListView
    - QUndoView 
    - QListWidget
- QTreeView
    - QTreeWidget
- QTableView
    - QTableWidget
- QColumnView

视图与模型

调用视图类的setModel()函数为视图组件设置一个模型,模型的数据就可以显示在视图组件上了
在视图组件上修改数据后,数据可以自动保存到模型中文章来源地址https://www.toymoban.com/news/detail-527732.html

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

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

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

相关文章

  • Qt 无法连接MySQL数据库

    Qt 5.15及之后版本缺少mysql驱动:qsqlmysql.dll、qsqlmysqld.dll 下载对应版本驱动:https://github.com/thecodemonkey86/qt_mysql_driver/releases?page=2 拷贝至Qt安装路径下,例如 Qt5.15.25.15.2msvc2019_64pluginssqldrivers 根据mysql版本下载对应mysql压缩包https://downloads.mysql.com/archives/community/ 找到libmysql.dll、

    2024年04月12日
    浏览(60)
  • QT mysql 驱动-数据库安装以及qt连接ssl报错问题

    文章末尾是引用笔记 配置MySQL8.0 环境变量 如果不配置MySQL环境变量,就不能在命令行直接输入MySQL登录命令。下面说如何配置MySQL的环境变量: 步骤1:在桌面上右击【此电脑】图标,在弹出的快捷菜单中选择【属性】菜单命令。 步骤2:打开【系统】窗口,单击【高级系统设

    2024年01月20日
    浏览(53)
  • Qt 数据库的注册和登录功能

    widget.h widget.cpp  client.h client.cpp  main函数 窗口设计部分 最终效果图:

    2024年02月07日
    浏览(48)
  • QT+SQLite数据库配置和使用

    一、简介 1.1 SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。 二、下载和配置 2.1 SQLite下载官网下载链接 2.2 根据计算机的配置,选择所需项目是64位还是32位下载对应的压

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

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

    2024年01月18日
    浏览(55)
  • C++ Qt开发:QSqlDatabase数据库组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 QSqlDatabase 数据库模块的常用方法及灵活运用。 Qt SQL模块是Qt框架的一部分,它

    2024年02月04日
    浏览(44)
  • Qt通过ODBC连接openGauss数据库

    本文就介绍了Qt通过ODBC连接opengauss数据库的基础内容。 在.pro文件中添加一行引入 添加如下测试代码 说明成功连接openGauss数据库 什么是ODBC ODBC(Open Database Connectivity,开放数据库互连)是由Microsoft公司基于X/OPEN CLI提出的用于访问数据库的应用程序编程接口。应用程序通过O

    2024年02月05日
    浏览(51)
  • Ubuntu下QT操作Mysql数据库

    本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结: (1) 数据库服务没启动报错信息 (2) 有QMYSQL驱动,连接数据缺失败 /

    2024年02月09日
    浏览(46)
  • 数据库课程设计——工资管理系统Qt

    近年来,随着我国信息技术的飞速发展,计算机应用已逐渐渗透到各个领域。在企业管理领域内,计算机的应用已经十分广泛,各种管理机制与企业运作流程都与计算机紧密结合在一起,计算机的应用进一步完善了企业的管理,提高了企业的现代化管理形象。开发职工工资管理

    2024年02月04日
    浏览(50)
  • 5、QT中SQLite数据库的操作

    执行数据库操作的类: SQLite3的基础教程 ①、创建数据库的链接对象: ②、使用数据库驱动 ③、设置数据库的名称(创建一个数据库) ④、创建一张表 例子: 例子: ①、遍历所有数据并保存 ②、对比数据 例子: 查询数据的时候,必须要先把遍历的数据保存在sqlQuery类中

    2024年02月09日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包