QML中多样化的ListModel(MultiDelegate)
在QML的官方例子里面, 基本上都是一样的Delegate, 也就是说不管数据怎样, 样式都是不变的.
如果我们想要根据不同的数据类型来显示不同的UI该怎么办? 这里有一个例子.
DataBank
ListModel {
id: dataBank
ListElement {
value: "http://www.wondericons.com/dogs/myspace_dogs_icons_02.gif"
type: "image"
}
ListElement {
value: "Dummy text 1"
type: "text"
}
ListElement {
value: "http://www.wondericons.com/dogs/myspace_dogs_icons_08.gif"
type: "image"
}
ListElement {
value: "Dummy text 2"
type: "text"
}
}
MultiDelegate
Item {
id: multiDelegate
height: 80
width: multiDelegate.ListView.view.width
function bestDelegate(t) {
if(t == "image")
return imgDelegate;
return txtDelegate; // t == "text"
}
Component {
id: imgDelegate
Image {
id: img
source: value
fillMode: Image.PreserveAspectFit
asynchronous: true
}
}
Component {
id: txtDelegate
Text {
id: txt
text: value
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
}
}
Loader {
id: itemDisplay
anchors.fill: parent;
anchors.topMargin: 2
anchors.bottomMargin: 2
sourceComponent: bestDelegate(type)
}
Rectangle {
id: separator
width: parent.width; height: 1; color: "#cccccc"
anchors.bottom: parent.bottom
}
}
Main
Rectangle {
ListView {
id: dataView
height: contentHeight
anchors.fill: parent
spacing: 2
model: DataBank{}
delegate: MultiDelegate{}
}
}
重点就在JavaScript函数 bestDelegate(type); 和QML的Loader元素;
在ListView选择delegate的时候会动态地根据数据类型来显示不同的样式;
<Refer to> http://cdumez.blogspot.com/2010/11/heterogeneous-list-model-in-qml.html
QML中多样化的ListModel(MultiDelegate)的更多相关文章
- QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 參考链接: http:// ...
- qml中打开本地html
main.cpp QString tmploc = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); QDi ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- qml 中 使用 shader
使用绘制工具如Photoshop .Flash已经可以创建许多效果非常绚丽的图像.动画等. Qt/QML 的努力其实是在这些工具发展的后面, 因此很多效果在Qt中无法实现. 不得不佩服Qt小组的才智, ...
- 通过WebChannel/WebSockets与QML中的HTML交互
来源:通过WebChannel/WebSockets与QML中的HTML交互 GitHub:八至 作者:狐狸家的鱼 本文链接:QML与HTML交互 在查询QML与HTML之间通信交互时资料很少,这篇文 ...
- [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取
背景 记得在初学qml时,就被大佬告知Qml的实现有两种方式“view+item”和“engine+widow”,那么能不能将QWidget嵌入到QML中来呢,我收到的答案是不可以,原因是QML的 ...
- 在 QML 中创建 C++ 导入类型的实例
在 QML 中创建 C++ 导入类型的实例 文件列表: Project1.pro QT += quick CONFIG += c++ CONFIG += declarative_debug CONFI ...
- QML中的state 状态
QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的. 比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中.比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好 ...
- QT之在QML中使用C++类和对象
QML其实是对ECMAScript的扩展,融合了Qt object系统,它是一种新的解释性语言,QML引擎虽然由Qt C++实现,但QML对象的运行环境说到底和C++对象的上下文环境是不通的,是平行的 ...
随机推荐
- Qt删除指定文件
Qt删除指定文件: QFile fileTemp(filename); fileTemp.remove();
- winform 之1---窗体介绍
窗体是winform开发的基础,需要掌握窗体的创建.属性.调用和窗体传值等等. 1.在项目中添加窗体很简单,在项目上点击右键,选择添加windows窗体即可为项目添加新的窗体. 2.窗体的属性设置,右 ...
- typeof 使用介绍
JS中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据. typeof 可以用来检测给定变量的数据类型,可能的返回值:1. 'undefined' --- 这个值未定义: 2. 'boole ...
- PredictionIO Open Source Machine Learning Server
PredictionIO Open Source Machine Learning Server Build Smarter Software with Machine Learning Predic ...
- 使用ExifInterface获取图片信息
package com.example.readimage; import java.io.IOException; import android.media.ExifInterface; impor ...
- perl 回调函数
在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 没啥不好理解的呀,就是向函数的参 ...
- 基于visual Studio2013解决面试题之1201链表去重
题目
- ajax终结篇
Ajax中post和get的区别 在ajax中有这个方法 xmlreq.open("post","servlet/MyServlet?time="+newDat ...
- State Design Pattern 状态设计模式
设置好内部状态,然后依据不同的函数作为行为模式,进行状态转换. 有点像Finite Automata算法,两者的思想是一样的. 会Finite Automata,那么这个设计模式就非常easy了. # ...
- SVN 1.8.x 服务器安装(转)
目录[-] 一. SVN 服务器下载.安装 1. 关于 Subversion 1.8.11 2. 兼容性问题 3. 安装包下载 3.1 VisualSVN 3.2 Win32Svn 3.3 SlikS ...