qml使用QAbstractListModel作为数据源

这篇具有很好参考价值的文章主要介绍了qml使用QAbstractListModel作为数据源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在日常开发中界面为了快速并且炫酷,大家可能会选择qml作为主体。但是后台数据的提供还是用qt c++的实现,MVC中即可用Model进行。例如:QAbstractListModel

一般的使用只实现下面三个函数即可支撑qml中的交互:

QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
QHash<int, QByteArray> QAbstractItemModel::roleNames() const

但是想要一些其他的功能,就需要自己去实现了!


一、例如想进行元素的移动,就需要model进行支撑

void AppInfoModel::move(int from, int to, int n)
{
    Q_UNUSED(n)
    int offset = 0;
    if(from == to) {
        return;
    } else if(to > from) {
        offset = to - from;
    }

    const QModelIndex& parent = QModelIndex();
    beginMoveRows(parent, from, from, parent, to + offset);
    AppInfo* item = appInfos_.takeAt(from);
    appInfos_.insert(to,item);
    endMoveRows();
}

主要在于beginMoveRows&endMoveRows中间进行的操作,将待移动项取出并插入到新位置。

需要注意上移和下移是不一样的呦!

二、又例如想进行元素的删除,也需要model进行支撑

void AppInfoModel::remove(int index)
{
    beginRemoveRows(QModelIndex(), index, index);
    QObject *obj = appInfos_.at(index);
    appInfos_.removeAt(index);
    obj->deleteLater();
    endRemoveRows();
}

主要在于beginRemoveRows&endRemoveRows中间进行的操作,将待删除元素取出,在model实际数据存储处进行remove,最后再将元素彻底delete。

需要注意deleteLater的使用哦!以免造成内存泄漏!文章来源地址https://www.toymoban.com/news/detail-675139.html

到了这里,关于qml使用QAbstractListModel作为数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 `本文主要描述如何在一个wayland client 中将一个 dma_buf import 作为一个 opengles texture 数据源 软硬件环境 硬件:aarch64 软件:linux5.10 opengles2.0/3.0 egl1.5 如下图所示,EGL 中 import dma_buf 作为 opengles texture ,主要

    2024年02月20日
    浏览(22)
  • 数据源使用问题记录

     \\\"Zero date value prohibited\\\"  url上拼接 zeroDateTimeBehavior=convertToNull com.alibaba.druid.pool.DruidDataSource : create connection Error java.lang.ExceptionInInitializerError: null at com.mysql.jdbc.Util.stackTraceToString(Util.java:378) at com.mysql.jdbc.Util.(Util.java:121) at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegistering

    2024年02月20日
    浏览(30)
  • springboot多数据源使用

    在工作上有一个新项目,现在需要获取旧项目的用户信息、积分的操作等等,所以需要调用另外一个项目的数据库,所以我们可以配置多数据源。 yml版本  properties版本 在impl类上加注解@DS(\\\"master\\\"),master为配置的master名字 调用方法  获取结果  在impl类上加注解@DS(\\\"slave_1\\\"),

    2024年02月11日
    浏览(30)
  • Spring | 基于SpringBoot的多数据源实战 - 使用seata实现多数据源的全局事务管理

    在软件开发中, 多数据源 的应用越来越普遍,特别是在 微服务架构 和 业务模块化 的场景下。多数据源能够让不同的业务模块和微服务拥有各自独立的数据存储,大大提高了系统的灵活性和可维护性。本文将深入探讨多数据源的配置和实施,以及在 Spring Boot 环境下,如何通

    2024年02月07日
    浏览(50)
  • 单个数据源与多数据源使用mybatisplus分页插件total一直为0的解决办法

    1. 注册分页插件( 不注册分页插件total也是0) : 注意:如果是 单数据源 此时分页插件能正常使用,而 如果是多数据源 ,那么就必须添加以下内容,否则分页时查询总数total还是0 2. 多数据源定义: 重点就是以下两行:  Interceptor[] interceptors = new Interceptor[] { mybatisPlusInterc

    2024年04月25日
    浏览(28)
  • 使用QT的QML实时显示海康威视网络摄像头的视频数据

    需求背景: 开发的监控软件中有个监控页面需要实时显示网络摄像头的数据,整个监控软件是基于QT的QML语言开发的。在QML中播放视频使用MediaPlayer组件就可以,但网上看到的一些都是播放录制好的视频文件,对于实时播放摄像头数据介绍的比较少。 开发环境: Debian11.3 Qt

    2024年02月09日
    浏览(69)
  • dolphinscheduler 3.0.1 数据源中心及使用

    🔼上一集:dolphinscheduler 3.0.1数据质量 *️⃣主目录:dolphinscheduler 3.0.1功能梳理及源码解读 🔽下一集:dolphinscheduler 3.0.1 监控中心(上):服务管理 2.0常见数据库都支持,MySQL、PostgreSQL、Oracle、SQLServer、Hive,这样都验证过,都支持,Spark是不支持的,2.0没开发spark数据库组件,

    2023年04月08日
    浏览(30)
  • springboot使用DynamicDataSource来动态切换数据源

    DynamicDataSource是一个数据源路由器,可以根据上下文动态选择数据源。可以在每个请求或线程中将数据源设置为当前需要使用的数据. 创建一个 DynamicDataSource 类,它继承自 AbstractRoutingDataSource 。在该类中重写**determineCurrentLookupKey()**方法,该方法返回一个字符串,用于指示当前

    2024年02月05日
    浏览(32)
  • docker版jxTMS使用指南:数据源简述

    本文讲解4.2版jxTMS的数据源,整个系列的文章请查看:docker版jxTMS使用指南:4.2版升级内容 docker版本的使用,请参考docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4.0版jxTMS主要是通过MQTT进行采集。这种采集模式是前端主动的、定时的向接口机进行推送,但对于

    2024年02月12日
    浏览(33)
  • 使用 Docker 部署 Nacos 并配置 MySQL 数据源

    在安装 Nacos 之前,请确保你已经准备好了一个运行中的 MySQL 数据库。本教程将指导您如何使用 Docker 在单机模式下部署 Nacos,并将其数据持久化到 MySQL 中。 步骤一:拉取 Nacos 镜像 拉取最新版本的 Nacos Server 镜像,也可以指定特定版本: 如果你想拉取特定版本,例如 v2.2.0,

    2024年02月21日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包