QML中ListView使用cpp的Model

QML中ListView使用cpp的Model


前言

我在实际转QML开发时,遇到一个百思不得其解的问题–>ListView的Model是来自C++,其中delegate中的有些显示数据,查不到引用,找了很久都不知道来自哪里?直到我看到博主「猫生鱼」的原创文章,注释里写明了来源,设置好对应的roleNames()后,ListView就可以在delegate中就可以直接使用title_、content_、select_来获取数据了。


代码如下:

/** ListView获取数据时,需要的别名
 * @brief MyListViewModel::roleNames
 * @return
 */
QHash<int, QByteArray> MyListViewModel::roleNames() const
{
    // 这样设置好后,ListView就可以在delegate中,
    // 直接使用title_、content_、select_来获取数据了。
    QHash<int, QByteArray> roles;
    roles[TitleRole] = "title_";
    roles[ContentRole] = "content_";
    roles[SelectRole] = "select_";
    return roles;
}
————————————————
版权声明:本文为CSDN博主「猫生鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_23604781/article/details/121563087

请特别注意一下注释内容,感谢博主的「猫生鱼」详文,文章来自https://blog.csdn.net/qq_23604781/article/details/121563087。如有侵权请联系删除,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
QML使用QAbstractItemModel需要通过C++代码编写自定义的QAbstractItemModel子类。下面是一个简单的示例: 1. 编写自定义的QAbstractItemModel子类 ``` // mymodel.h #ifndef MYMODEL_H #define MYMODEL_H #include <QAbstractItemModel> class MyModel : public QAbstractItemModel { Q_OBJECT public: explicit MyModel(QObject *parent = nullptr); // 获取模型数据的数量和索引 int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; // 获取模型数据 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; private: QStringList m_data; }; #endif // MYMODEL_H ``` ``` // mymodel.cpp #include "mymodel.h" MyModel::MyModel(QObject *parent) : QAbstractItemModel(parent) { // 初始化模型数据 m_data << "Item 1" << "Item 2" << "Item 3"; } int MyModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_data.count(); } int MyModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return 1; } QModelIndex MyModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() || row < 0 || row >= m_data.count() || column < 0 || column >= 1) return QModelIndex(); return createIndex(row, column); } QVariant MyModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (role == Qt::DisplayRole || role == Qt::EditRole) return m_data.at(index.row()); return QVariant(); } ``` 2. 在QML使用自定义的QAbstractItemModel子类 ``` // main.qml import QtQuick 2.0 import QtQuick.Controls 2.0 ApplicationWindow { visible: true width: 400 height: 400 // 创建自定义模型 MyModel { id: myModel } // 使用ListView显示模型数据 ListView { anchors.fill: parent model: myModel delegate: Text { text: model.display } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

尔雅慕客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值