qml----Model/View入门(七)GridView

本文介绍了一个使用GridView展示数据的示例,通过将XMLListModel中的数据以图标形式显示在GridView中,展示了如何设置数据源、角色映射及视图委托。

  gridview和listview相似,只不过是呈现的方式不同,可以把grideview理解成 IconMode的呈现方式,下面是个使用gridview的例子,作为Model,仍然使用xmlListModel中的数据

  

import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.XmlListModel 2.0

Rectangle {
    width: 400
    height: 400

    Component{
        id: videoModel
        XmlListModel{
            id: xmlModel
            source: "videos.xml"
            query: "/videos/video"
            XmlRole{name: "name"; query: "@name/string()"}
            XmlRole{name: "img"; query: "poster/@img/string()"}
            XmlRole{name: "rating"; query: "attr[3]/number()"}
        }
    }//video model is end

    Component{
        id: videoDelegate
        Item{
            id: wrapper
            width: videoView.cellWidth
            height: videoView.cellHeight
            MouseArea{
                anchors.fill: parent
                onClicked: wrapper.GridView.view.currentIndex = index
            }

            Image {
                id: poster
                width: 100
                height: 150
                anchors.horizontalCenter: parent.horizontalCenter
                anchors.top: parent.top
                anchors.topMargin: 3
                fillMode: Image.PreserveAspectFit
                source: img
            }

            Text{
                anchors.top: poster.bottom
                anchors.topMargin: 4
                width: parent.width

                text: name
                color: wrapper.GridView.isCurrentItem ? "blue" : "black"
                font.pixelSize: 18
                horizontalAlignment: Text.AlignHCenter
                elide: Text.ElideMiddle
            }

        }
    }//video model is end

    GridView{
        id: videoView
        anchors.fill: parent
        cellWidth: 120
        cellHeight: 190

        delegate: videoDelegate
        model: videoModel.createObject(videoView)
        focus: true
        highlight: Rectangle{
            color: "lightblue"
        }
    }
}

 

  效果如如下:

  

 

转载于:https://www.cnblogs.com/SaveDictator/p/8244513.html

### QMLModel-View 的实现与用法 QML 提供了一种灵活的方式来定义用户界面,并通过 `Model-View` 架构模式来分离数据逻辑和显示逻辑。这种架构使得开发者可以更高效地管理复杂的数据集并将其绑定到视图组件上。 #### 1. **Model 的概念** 在 QML 中,`Model` 是一种用于提供数据的对象集合。它可以是一个简单的列表、一个动态生成的数据源或者来自 C++ 后端的复杂对象结构。常见的模型类型包括但不限于: - 列表模型 (`ListModel`):适用于静态或简单数据集。 - JavaScript 数组:可以直接作为模型传递给视图。 - 自定义 C++ 模型:可以通过 Qt 的元对象系统暴露给 QML 使用[^1]。 ```javascript // 定义一个 ListModel 示例 ListModel { id: fruitModel ListElement { name: "Apple"; color: "red" } ListElement { name: "Banana"; color: "yellow" } } ``` #### 2. **View 的角色** `View` 负责展示由 `Model` 提供的数据。它通常以某种布局形式呈现这些数据项,比如网格、列表或其他自定义样式。常用的视图组件有: - `ListView`:线性排列项目。 - `GridView`:以二维网格方式排列项目。 - `PathView`:沿着路径排列项目。 下面展示了如何将上面定义的 `fruitModel` 绑定到 `ListView` 上: ```qml ListView { model: fruitModel delegate: Rectangle { width: parent.width; height: 40 Text { text: name + ": " + color anchors.centerIn: parent } } } ``` #### 3. **Delegate 的作用** 为了定制每一项的外观,QML 提供了 `delegate` 属性。这是一个小型模板,用来描述每一条记录应该如何被渲染。上述例子中,我们使用了一个矩形区域配合文字标签来表示水果名称及其颜色属性。 #### 4. **结合外部资源** 当涉及到复杂的三维场景时,可能还需要引入额外的内容支持。例如,在某些情况下,可能会利用 Khronos Group 的 glTF 格式文件加载高质量的 3D 模型[^3]。这不仅增强了视觉体验,还允许进一步扩展交互功能。 #### 5. **混合开发环境下的应用** 如果希望在一个基于传统桌面应用程序框架(如 Qt Widgets)之上嵌入现代 QML 用户界面,则可考虑采用 `QQuickWidget` 类完成集成工作[^2]。这种方式特别适合那些正在逐步迁移到全新技术栈的老项目。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值