在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)的更多相关文章

  1. QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据

    QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 參考链接: http:// ...

  2. qml中打开本地html

    main.cpp QString tmploc = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); QDi ...

  3. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

  4. qml 中 使用 shader

    使用绘制工具如Photoshop .Flash已经可以创建许多效果非常绚丽的图像.动画等. Qt/QML 的努力其实是在这些工具发展的后面, 因此很多效果在Qt中无法实现. 不得不佩服Qt小组的才智, ...

  5. 通过WebChannel/WebSockets与QML中的HTML交互

    来源:通过WebChannel/WebSockets与QML中的HTML交互 GitHub:八至 作者:狐狸家的鱼 本文链接:QML与HTML交互 在查询QML与HTML之间通信交互时资料很少,这篇文 ...

  6. [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

      背景 记得在初学qml时,就被大佬告知Qml的实现有两种方式“view+item”和“engine+widow”,那么能不能将QWidget嵌入到QML中来呢,我收到的答案是不可以,原因是QML的 ...

  7. 在 QML 中创建 C++ 导入类型的实例

    在 QML 中创建 C++ 导入类型的实例 文件列表: Project1.pro QT += quick CONFIG += c++ CONFIG += declarative_debug CONFI ...

  8. QML中的state 状态

    QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的. 比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中.比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好 ...

  9. QT之在QML中使用C++类和对象

    QML其实是对ECMAScript的扩展,融合了Qt object系统,它是一种新的解释性语言,QML引擎虽然由Qt C++实现,但QML对象的运行环境说到底和C++对象的上下文环境是不通的,是平行的 ...

随机推荐

  1. SGU 415. Necessary Coins ( 背包dp )

    题意大概是:给出N个硬币, 面值为a_i, 问要凑成X元哪些硬币是不可或缺的.1 ≤ N ≤ 200, 1 ≤ x ≤ 10^4 直接枚举, 然后就是01背包了. 为了不让复杂度多乘个N, 我们就从左 ...

  2. tomcat启动后ids页面无法访问

    修改servers-->tomcat6.0-->server.xml <Context docBase="/tds7030-web" path="&qu ...

  3. saltstack:使用教程之一安装及客户端返回写入MySQL

    saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...

  4. Jquery学习笔记:删除节点的操作

    假设如下的html代码 <div id="mydiv" style="width:100px;height:100px;border:1px solid red&q ...

  5. Windows的TCP协议参数

    注册表编辑器:regedit 表项:HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Services\Tcpip\Parameters 窗口扩大因子 & ...

  6. ios内存管理2-对象之间的内存管理

    同之前一样,新建一个基于命令行的工程,在新建一个Student类和一个Book类 编写如下代码: Student.h // // Student.h // 内存管理2-对象之间的内存管理 // // ...

  7. 关于js基础easy忘记的那些事儿

    1.Number() 通过这个函数转化后的值仅仅有两个:数值和NaN,通过parseInt也能转化为数值.可是像"134df"转化后的值为134,而Number("134 ...

  8. boost::property_tree读取解析ini文件--推荐

    boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...

  9. python for else

    http://blog.sina.com.cn/s/blog_5357c0af01013mwn.html raw_input() 与 input() __ Python http://www.cnbl ...

  10. 基于visual Studio2013解决面试题之0710求方优化

     题目