当前位置: 首页 > news >正文

网站设计培训基地网站特殊字体

网站设计培训基地,网站特殊字体,对网站做维护,淘宝客如何做淘宝客网站文章目录 Qt 模型视图结构概述(一)1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图结构概述(一) ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据#xff0c;视图组件显示模型中的数据#xff0c;在视图组件里修改的数据会… 文章目录 Qt 模型视图结构概述(一)1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图结构概述(一) ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据视图组件显示模型中的数据在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列表或二维表格型数据也可以是数据库中的数据表一种模型可以用不同的视图组件来显示数据所以模型/视图结构是一种高效、灵活的编程结构。 1、模型/视图结构基本原理 GUI 程序的主要功能是可由用户在界面上编辑和修改数据典型的如数据库应用程序。在数据库应用程序中界面上的数据来源于数据库用户在界面上修改数据修改后的数据又保存到数据库。 ​ 将界面与原始数据分离又通过模型将界面和原始数据关联起来从而实现界面与原始数据的交互操作这是处理界面与数据的一种较好的方式。 ​ Qt 使用模型/视图结构来处理这种关系模型/视图的基本结构如图 1 所示它包括以下几个部分。 图 1 模型/视图基本结构 源数据data是原始数据如数据库的一个数据表或 SQL查询结果、内存中的一个字符串列表或磁盘文件系统结构等。视图view也称为视图组件是界面组件视图从模型获得数据然后将其显示在界面上。Qt 提供一些常用的视图组件如 QListView、QTreeView 和 QTableView 等。模型model也称为数据模型与源数据通信并为视图组件提供数据接口。它从源数据提取需要的数据用于视图组件进行显示和编辑。Qt 中有一些预定义的模型类如QStringListModel 是字符串列表的模型类QSqlTableModel 是数据库中数据表的模型类。代理delegate在视图与模型之间交互操作时提供的临时编辑器。模型向视图提供数据是单向的一般仅用于显示。当需要在视图上编辑数据时代理会为编辑数据提供一个编辑器这个编辑器获取模型的数据、接受用户编辑的数据后又将其提交给模型。例如在QTableView 组件上双击一个单元格来编辑数据时在单元格里就会出现一个 QLineEdit 组件这个编辑框就是代理提供的临时编辑器。 由于通过模型/视图结构将源数据与显示和编辑界面分离我们可以将一个模型在不同的视图中显示也可以为一些特殊源数据设计自定义模型或者在不修改模型的情况下设计特殊的视图组件。所以模型/视图结构是一种高效、灵活的编程结构。 模型、视图和代理使用信号和槽进行通信。当源数据发生变化时模型发射信号通知视图组件当用户在界面上操作数据时视图组件发射信号表示操作信息在编辑数据时代理会发射信号告知模型和视图组件编辑器的状态。 2、模型 所有基于项item的模型类都是基于 QAbstractItemModel 类的这个类定义了视图组件和代理存取数据的接口。模型只是在内存中临时存储数据模型的数据来源可以是其他类、文件、数据库或任何数据源。 Qt 中几个主要的模型类的继承关系如图 2 所示。QAbstractItemModel 的父类是 QObject所以模型类支持 Qt 的元对象系统。 图 2 模型类的继承关系 抽象模型类 QAbstractItemModel 不能直接用于创建实例对象常用的几个模型类如表 1 所示。 表 1 常用的模型类 模型类功能QFileSystemModel用于表示计算机上文件系统的模型类QStringListModel用于表示字符串列表数据的模型类QStandardItemModel标准的基于项的模型类每个项是一个 QStandardItem 对象QSqlQueryModel 用于表示数据库 SQL 查询结果的模型类QSqlTableModel用于表示数据库的一个数据表的模型类 3、视图 视图就是用于显示模型中的数据的界面组件Qt 提供的视图组件主要有以下几个。 表 2 常用的视图类 视图组件用于显示单列的列表数据适用于一维数据的操作QListView用于显示单列的列表数据适用于一维数据的操作QTreeView用于显示树状结构数据适用于树状结构数据的操作QTableView用于显示表格数据适用于二维表格数据的操作QColumnView用多个 QListView 显示树状结构数据树状结构的一层用一个QListView显示QUndoView用于显示 undo 指令栈内数据的视图组件是 QListView 的子类 QListWidget、QTreeWidget 和 QTableWidget 这 3 个用于处理项数据的组件。这3 个类分别是 3 个视图类的子类称为视图类的便利类convenience class。这些类的继承关系如图 3 所示。 图 3 视图类的继承关系 只需调用视图类的 setModel()函数为视图组件设置一个模型模型的数据就可以显示在视图组件上。在视图组件上修改数据后数据可以自动保存到模型里。视图组件的数据来源于模型视图组件不存储数据。便利类则为组件的每个节点或单元格创建一个项用项存储数据例如对于 QTableWidget 类这个便利类表格的每个单元格关联一个QTableWidgetItem 对象。便利类没有模型它实际上是用项的方式替代了模型的功能将界面与数据绑定。因此便利类缺乏对大型数据源进行灵活处理的能力只适用于小型数据的显示和编辑而视图组件则会根据模型的数据内容自动显示有助于减少编程工作量使用起来也更灵活。 4、代理 代理就是在视图组件上为编辑数据提供的临时编辑器例如在 QTableView 组件上编辑一个单元格的数据时默认会提供一个 QLineEdit 编辑框。代理负责从模型获取相应的数据然后将其显示在编辑器里修改数据后又将编辑器里的数据保存到模型中。 QAbstractItemDelegate 是所有代理类的基类。它有两个子类 QItemDelegate 和QStyledItemDelegate 这两个类的功能基本相同而QStyledItemDelegate 能使用 Qt 样式表定义的当前样式绘制代理组件所以QStyledItemDelegate是视图组件使用的默认的代理类。 对于一些特殊的数据编辑需求例如只允许输入整数时使用 QSpinBox 作为代理组件更合适需要从列表中选择数据时则使用 QComboBox作为代理组件更好这时就可以从 QStyledItemDelegate继承创建自定义代理类。 5、简单实例 展示了模型/视图类使用的简单实例 main.cpp #include QApplication #include QSplitter #include QFileSystemModel #include QTreeView #include QListViewint main(int argc, char *argv[]) {QApplication app(argc, argv);QSplitter *splitter new QSplitter;QFileSystemModel *model new QFileSystemModel;model-setRootPath(QDir::currentPath());QTreeView *tree new QTreeView(splitter);tree-setModel(model);tree-setRootIndex(model-index(QDir::currentPath()));QListView *list new QListView(splitter);list-setModel(model);list-setRootIndex(model-index(QDir::currentPath()));splitter-setWindowTitle(Two views onto the same file system model);splitter-show();return app.exec(); } 实例运行展示如下图
http://www.w-s-a.com/news/158991/

相关文章:

  • 网站建设0基础学起青海企业网站开发定制
  • 网站定制项目上海快速建站
  • 大型视频网站建设方案东莞企业网站建设开发
  • 西安php网站制作可以用AI做网站上的图吗
  • 网站开发工程师和前端企业网络推广公司
  • 泉州开发网站的公司有哪些电脑网页翻译
  • 河北省建设机械会网站首页刚做的网站怎么收录
  • 什么网站专门做自由行的framework7做网站
  • 网页设计与网站建设书籍包头住房与城乡建设局网站
  • 重庆网站建设平台免费猎头公司收费收费标准和方式
  • 形象设计公司网站建设方案书打开一个不良网站提示创建成功
  • 网站手机页面如何做网站关键字 优帮云
  • 免费的黄冈网站有哪些下载软件系统软件主要包括网页制作软件
  • 企业微站系统重庆高端网站建设价格
  • 有没有做衣服的网站吗网站自适应开发
  • 青海省制作网站专业专业定制网吧桌椅
  • 网站开发的项目17岁高清免费观看完整版
  • 手机网站建设多少钱一个门网站源码
  • 重庆 网站开发天津住房和城乡建设厅官方网站
  • 泰安高级网站建设推广厦门高端网站建设定制
  • jsp网站开发引用文献手机seo排名
  • 创建一家网站如何创设计网页的快捷网站
  • 1688代加工官方网站h5开发教程
  • 静态网站源码下载网站怎么显示备案号
  • 网站代码设计网站开发维护任职要求
  • 长寿做网站的电话怎么快速刷排名
  • 上海市中学生典型事例网站邯郸全网推广
  • 厦门网站建设680元好男人的最好的影院
  • 石家庄网站建设设计产品设计专业就业前景
  • 网站移动排名做最好最全的命理网站