QT创建新模型

本文介绍了如何在QT中创建模型,包括设计模型的选择、只读模型的实现、如何使模型可编辑以及插入和删除行的方法。QAbstractItemModel作为接口,不存储数据但提供视图访问数据的途径。QAbstractListModel和QAbstractTableModel适用于简单的数据结构,而QAbstractItemModel适合层次结构。文中以一个简单的只读模型为例,展示了如何从只读模型转换为可编辑模型,以及如何插入和删除行。
摘要由CSDN通过智能技术生成

模型/视图组件之间的功能分离允许创建可以利用现有视图的模型。这种方法允许我们使用标准图形用户界面组件(如QListView、QTableView和QTreeView)显示来自各种源的数据。

QAbstractIteModel类提供的接口足够灵活,足以支持在分层结构中排列信息的数据源,从而允许以某种方式插入、删除、修改或排序数据。它还支持拖放操作。

QAbstractListModel和QAbstractTableModel类提供了对更简单的非层次数据结构的接口的支持,并且更容易作为简单列表和表模型的起点使用。

设计模型

为现有数据结构创建新模型时,必须考虑应使用哪种类型的模型为数据提供接口。数据结构是否可以表示为项目的列表或表,可以继承QAbstractListModel或QAbstractTableModel,因为这些类为许多函数提供了合适的默认实现。

如果底层数据结构只能用层次树结构表示,则有必要继承QAbstractItemModel。
可参考简单树模型示例:https://doc.qt.io/qt-6/qtwidgets-itemviews-simpletreemodel-example.html

只读模型示例:

这里实现的模型是一个基于标准QStringListModel类的简单的、无层次的只读数据模型。它有一个QStringList作为它的内部数据源,并且只实现构建一个功能模型所需要的东西。
为了使实现更容易,我们子类化QAbstractListModel,因为它为列表模型定义了合理的默认行为,并且它公开了一个比QAbstractItemModel类更简单的接口。

在实现模型时,重要的是要记住QAbstractItemModel本身并不存储任何数据,它只是提供视图用来访问数据的接口。对于最小只读模型,只需要实现一些函数,因为大多数接口都有默认实现。类声明如下:

#ifndef STRINGLISTMODEL_H
#define STRINGLISTMODEL_H
#include <QAbstractListModel> //列表模型
class StringListModel : public QAbstractListModel{
   
    Q_OBJECT

public:
    StringListModel(const QStringList &strings, QObject *parent = nullptr)
        : QAbstractListModel(parent), stringList(strings){
   }

//返回模型中的行数
int rowCount(const QModelIndex &parent = QModelIndex())const override;
//索引处的数据
QVariant data(const QModelIndex &index,int role) const override;
//给树和表视图一些显示在它们的头文件中的东西
QVariant headerData(int section,Qt::Orientation orientation,int role = Qt::DisplayRole) const override;

private:
        QStringList stringList; //数据
    };
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值