前言:

在编程实践中,我们经常会有意无意的运用MVC模式(模型(Model)、视图(View)和控制器(Controller)),而在QtQuick中,数据通过model-view(模型-视图) 分离。对于每个view(视图) ,每个数据元素的可视化都分给一个代理(delegate) 。
在QML中,model(模型) 与view(视图) 都通过delegate(代理) 连接起来。功
能划分如下,model(模型) 提供数据。对于每个数据项,可能有多个值。显示在
view(视图) 中的每项数据,都是通过delegate(代理) 来实现可视化。view(视
图) 的任务是排列这些delegate(代理) ,每个delegate(代理) 将model item(模型项) 的值显示给用户。

一、基础模型(Basic Model)

最基本的实现:使用repeater元素用于实现子元素的标号。每个子元素都拥有一个可以访问的属性index,用于区分不同的子元素。在下面的例子中,一个repeater元素创建了10个子项,子项的数量由model属性控制。对于每个子项Rectangle包含了一个Text元素,你可以将text属性设置为index的值,因此可以看到子项的编号是0~9。

import QtQuick 2.0
import "BlueBox.qml"//使用自定义组件
Column {spacing: 8Repeater {model: ["Enterprise", "Colombia", "Challenger", "Discovery", "Endeavour", "Atlantis"]BlueBox {width: 100height: 32radius: 3text: modelData + ' (' + index + ')'}}
}

BlueBox源码:

import QtQuick 2.0Rectangle {id: rootwidth: 64height: 64color: "#157efb"border.color: Qt.darker(color, 1.2)//声明属性的别名property alias text: label.text//声明自定义属性property color fontColor: '#1f1f1f'Text {id: labelanchors.centerIn: parentfont.pixelSize: 14color: root.fontColor}
}

二、链表模型

import QtQuick 2.0
import "../common"Background {width: 180height: 300ListView {anchors.fill: parentanchors.margins: 20clip: true//可裁剪model: 100//整数,提供给代理使用的索引值(index )delegate: numberDelegatespacing: 5}Component {id: numberDelegateGreenBox {width: 40height: 40text: index}}
}

效果如下:

每个数据的入口是模型,视图通过可视化代理来实现数据的可视化。将数据从显示中分离出来。一个模型可以是一个整数,提供给代理使用的索引值(index ) 。如果JavaScript数组被作为一个模型,模型数据变量(modelData) 代表了数组的数据的当前索引。对于更加复杂的情况,每个数据项需要提供多个值,使用链表模型(ListModel) 与链表元(ListElement) 是一个更好的解决办法。对于静态模型,一个Repeater可以被用作视图。它可以非常方便的使用行(Row) ,(Column) ,栅格(Grid) ,或者流(Flow) 来创建用户界面。对于动态或者大的数据模型,使用ListView或者GridView更加适合。它们会在需要时动态的创建代理,减少在场景下一次显示的元素的数量。

QML进阶教程:五、模型-视图-代理(MVD)相关推荐

  1. Qt MVD模型视图代理组件简介

    目录 模型 视图 代理(Delegate) 数据模型如何与视图绑定 增加视图数据 删除视图数据 获取视图数据   在Qt面试时,经常会问mode view相关的问题,如果没有做过相关的项目,估计不好回 ...

  2. 【Qt】模型-视图-代理(Model-View-Delegate)

    Qt英文手册:https://qmlbook.github.io/assets/qt5_cadaques.pdf 文章目录 一.概念(Concept) 二.基础模型 三.动态视图(Dynamic Vi ...

  3. cmenu 隐藏子项中的一个子项_QML中的模型-视图-代理

    前言 对于开发用户界面,最重要的一方面是保持数据与可视化的分离.例如,一个电话簿可以使用一个垂直文本链表排列或者使用一个网格联系人图片排列.在这两种情况中,数据都是相同的,但是可视化效果却是不同的.这 ...

  4. QML进阶教程:二、缓冲曲线(Easing Curves)

    前言: 属性值的改变能够通过一个动画来控制,缓冲曲线属性影响了一个属性值改变的插值算法.在已经定义的动画都使用了一种线性的插值算法,因为一个动画的默认缓冲类型是Easing.Linear.在一个小场景 ...

  5. NSIS进阶教程(一)~(五)

    这问是在学NSIS的时候发现的,一篇绝顶好文,当时没转过来,现在美化完程序了,想着不美化安装包也太不厚道了点...所以... NSIS进阶教程(一) 来自: http://www.pylife.net ...

  6. QT学习:模型/视图基本概念

    Qt的模型/视图结构分为三部分:模型(Model).视图(View)和代理(Delegate).其中,模型与数据源通信,并为其他部件提供接口:而视图从模型中获得用来引用数据条目的模型索引(Model ...

  7. 【Qt】模型/视图结构和数据绑定控件

    模型/视图结构 模型/视图是指处理数据的模型和向用户提供GUI的视图,这是从GUI分离数据的一种结构,又称为MVC(Model-View-Controller). 模型 QAbstractItemMo ...

  8. Qt中模型/视图结构

    8.1 概述 MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包括三个元素:表示数据的模型 (Model).表示用户 ...

  9. Qt5入门学习——模型/视图结构

    文章目录 概述 基本概念 简单文件目录浏览器[简单示例] 模型(Model) 自定义模型[示例] 视图(View) 表格数据显示[示例] 代理(Delegate) 利用Delegate设计表格控件[示 ...

最新文章

  1. 江南Style之---西湖
  2. ubuntu重启+sublime快捷键
  3. oracle 体系结构认识,Oracle数据库体系结构简单认识一
  4. 通过指针便利图像元素
  5. mfc读取bmp文件_LIUNX 工程bmp.c 显示图片 开发板出来的图片只有一个角 求大佬解决...
  6. 胡寿松自动控制原理第七版勘误-152页
  7. 广州网站建设哪些公司好
  8. 节理玫瑰花图怎么画_什么软件能便捷地绘制出节理玫瑰花图、水系玫瑰花图?...
  9. 信息学奥赛一本通|1179:奖学金
  10. (转)sonicstage 完整删除的方法
  11. java开发手机app教程,看完必懂
  12. CAD打断曲线(com接口c#语言)
  13. 【历史上的今天】7 月 15 日:Mozilla 基金会正式成立;Enigma 密码机的首次工作;任天堂推出 FC 游戏机
  14. Freemarker 简介 及手册
  15. 排序算法整理(冒泡、选择、快排、堆排序、希尔、归并)
  16. 产品分析报告——“京东到家”
  17. matplotlib中cmap_Matplotlib:imshow中cmap的功能是什么?
  18. php图片特效,css3实现图片头像扫光高亮效果
  19. 台式计算机内存是什么问题,如何解决台式机上内存不足的问题
  20. vs2017 fatal error LNK1104: 无法打开文件“\.obj”

热门文章

  1. 教大家如何在官网下载不同版本的postgresql包含之前历史版本--适合linux系统
  2. mid是什么音乐文件?为什么这么小?
  3. 场景demo落地 - 视频通话产品 2.0 ARCall
  4. 声网在线K歌房解决方案:一站式接入版权曲库与K歌组件
  5. JAVA软件开发之8例
  6. 北京新机场 严打无人机“黑飞”
  7. 不同装修风格如何选择地板?极家精装好吗?
  8. 如何从 Github 中删除提交
  9. Linux虚拟文件系统、文件描述符、管道
  10. Maya中的场景与Unity3D中的场景匹配