QML model-view 框架

Qt hello - 专注于Qt的技术分享平台

在开发用户界面时,最好的办法是保持数据与可视化的分离。比如一个通讯录,可以用list展示,也可以用grid展示,这都属于view部分,可以不同。但是数据都是相同的,都有名称,头像,手机号等元素。QML针对这种场景提供了model-view框架。其实同样的模式在传统的QWidget 框架中也有,比如QListView 和QTableView。

一,实现起来,记住三个关键点:

1,model。 数据来源,一般是通过网络请求获取。

2,view。负责可视化显示,是ListView 还是GridView。

3,delegate。代理,就是怎么展示数据。它负责将model和view连接起来,将model中的每条数据通过具体的控件,渲染到view中。

下面通过一个例子,来说明代码的写法,这个例子类似一个通讯录,数据我们写死,真实情况应该是从接口获取。利用ListView进行可视化。代理是一个Rectangle 内部一个Image展示头像,一个Text 显示文本。

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //可视化view
    ListView{
        anchors.fill: parent
        width: 100
        delegate: addressDelegate
        model: model
    }

    //list 模型
    ListModel{
        id:model
    }

    //代理
    Component{
        id:addressDelegate
        Rectangle{
            width: 140
            height: 120

            RowLayout{
                anchors.fill: parent
                anchors.margins: 10
                //头像
                Image {
                    source: img
                    Layout.preferredWidth: 100
                    Layout.preferredHeight: 100
                }
                //名称
                Text {
                    text: name
                    verticalAlignment: Text.AlignVCenter
                }
            }
        }
    }

    //构造模型数据
    Component.onCompleted: {
        model.append({"img":"https://img2.baidu.com/it/u=607192830,2624468444&fm=253&fmt=auto&app=120&f=JPEG?w=1025&h=684","name":"刘备"})
        model.append({"img":"https://img2.baidu.com/it/u=1662844506,2024543724&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=1052","name":"关羽"})
        model.append({"img":"https://img2.baidu.com/it/u=2512544330,2343544095&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=300","name":"张飞"})
        model.append({"img":"https://img2.baidu.com/it/u=4186203074,1390758742&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=618","name":"赵云"})
    }
}

二,总结

跳转到这里:QML model-view 框架 - Qt hello

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QML(Qt Meta-Object Language)是一种用于构建用户界面(UI)的声明性语言,而MVCModel-View-Controller)是一种常用的软件架构模式。在QML中实现MVC框架可以帮助我们更好地组织和管理UI的逻辑和数据。 下面是一个简单的示例,演示了如何在QML中实现MVC框架: 1. Model(模型):模型是应用程序数据的底层表示。在QML中,可以使用JavaScript对象来表示模型。例如,可以创建一个名为`MyModel`的JavaScript对象,其中包含应用程序需要的数据和相关的操作。 ```qml // MyModel.qml import QtQuick 2.0 Item { property int data: 0 function increment() { data++ } } ``` 2. View(视图):视图是用户界面的可视化表示。在QML中,可以使用各种QML组件来构建视图。例如,可以创建一个名为`MyView`的QML组件,其中包含显示模型数据和响应用户交互的界面元素。 ```qml // MyView.qml import QtQuick 2.0 Rectangle { width: 200 height: 200 Text { anchors.centerIn: parent text: model.data font.pixelSize: 24 } MouseArea { anchors.fill: parent onClicked: model.increment() } } ``` 3. Controller(控制器):控制器是模型和视图之间的中间层,负责处理用户输入和更新模型数据。在QML中,可以使用信号和槽机制来实现控制器的功能。例如,可以创建一个名为`MyController`的QML对象,其中包含处理用户点击事件并更新模型的函数。 ```qml // MyController.qml import QtQuick 2.0 Item { signal clicked() function handleClick() { clicked() } } ``` 4. 主程序:在主程序中,我们需要将模型、视图和控制器组合起来。可以在主QML文件中引入并实例化这些组件,并使用信号和槽机制将它们连接起来。 ```qml // main.qml import QtQuick 2.0 Item { MyModel { id: model } MyView { model: model } MyController { onClicked: model.increment() } } ``` 通过以上步骤,我们实现了一个简单的MVC框架。模型负责存储数据,视图负责展示数据,并通过控制器处理用户交互。这种分离和组合的方式可以帮助我们更好地管理UI的逻辑和数据,提高代码的可维护性和可扩展性。 请注意,这只是一个简单的示例,实际的MVC框架可能更加复杂和灵活,需要根据具体应用的需求进行设计和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值