Model-View-Delegate是Qt中复合控件的一种设计模式 如ListView,TableView,ComboBox等控件,都会用到这种设计模式
设计原理
【Model-View-Delegate】翻译成中文就是【模型-视图-代理】,它的思想是这样的:
- 用一个model对线来存储数据源,一般是一个数组或List
- View只绘制控件的基础部分,比如ComboBox,它只负责文本标签和下拉箭头的绘制
- 复合控件的子元素交给delegate去绘制,delegate定义了如何将model中的单个元素绘制成一个子项视图
示例代码
Model-View-Delegate界面设计模式既适用于Qt Widget,也适用于Qt Quick,这里我们以Qt Quick为例
//main.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
ComboBox {
id: combo
width: 300
height: 50
//数据源
model: [{
"name": "Programmer A",
"age": 25
}, {
"name": "Programmer B",
"age": 26
}, {
"name": "Programmer C",
"age": 27
}]
//选中项
currentIndex: -1
//定义某一下拉项的视图
delegate: ItemDelegate {
width: combo.width
contentItem: Text {
text: modelData.name + " " + modelData.age //modelData属性对应某一下拉项的数据
color: "darkgreen"
font: combo.font
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
highlighted: combo.highlightedIndex == index //highlighted表示鼠标正悬浮在当前项上
}
//定义主文本标签的视图
contentItem: Text {
leftPadding: 10
rightPadding: indicator.width + 10
text: combo.currentIndex
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?