Qt体系Model/View中role理解

在Qt的Model/View体系中,经常需要用不同的role来不同的数据类型。在学习这里时我也有过疑惑为什么在setData方法中要用EditRole来保存修改的数据,而在data方法中要用DisplayRole来显示数据,同样的数据对应不同的role?这是怎么回事!!!

后来才知道自己钻了牛角尖,role在Model/View体系中对应不同的“功能卡”,当你要显示某些数据时,对应的功能卡应当是DisplayRole;当你要存储某些数据时,应使用EditRole功能卡。

转载于:https://my.oschina.net/weiweiqiao/blog/855855

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt自定义Model/View模型,您可以继承QAbstractItemModel类,并实现其相关的虚拟函数来定义自己的数据模型。 下面是一个简单的示例,展示如何自定义一个简单的树形模型(Tree Model): ```cpp #include <QAbstractItemModel> #include <QModelIndex> #include <QVariant> class MyTreeModel : public QAbstractItemModel { public: explicit MyTreeModel(QObject *parent = nullptr); ~MyTreeModel(); // 重写父类的虚拟函数 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; }; MyTreeModel::MyTreeModel(QObject *parent) : QAbstractItemModel(parent) { // 在构造函数初始化数据模型 } MyTreeModel::~MyTreeModel() { // 在析构函数清理数据 } QModelIndex MyTreeModel::index(int row, int column, const QModelIndex &parent) const { // 返回指定行、列和父索引的模型索引 } QModelIndex MyTreeModel::parent(const QModelIndex &child) const { // 返回指定子索引的父索引 } int MyTreeModel::rowCount(const QModelIndex &parent) const { // 返回指定父索引的子项数目 } int MyTreeModel::columnCount(const QModelIndex &parent) const { // 返回模型的列数 } QVariant MyTreeModel::data(const QModelIndex &index, int role) const { // 返回指定模型索引和角色的数据 } ``` 在这个示例,我们自定义了一个名为MyTreeModel的树形模型,继承自QAbstractItemModel类,并重写了QAbstractItemModel的一些虚拟函数。在这些函数,您可以根据自己的数据结构和需求来实现相应的逻辑。 要使用自定义的模型,您可以在视图设置该模型,如: ```cpp MyTreeModel model; QTreeView view; view.setModel(&model); ``` 当您设置了自定义的模型后,视图将使用模型提供的数据来显示和管理数据。 当然,这只是一个简单的示例。在实际应用,您可能需要更复杂的数据结构和逻辑来实现您的自定义模型。但是通过继承QAbstractItemModel类,并实现其虚拟函数,您可以很好地控制自己的数据模型和视图之间的交互。 希望这个示例能够帮助您开始自定义Model/View模型的开发!如果您有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值