按索引列出的 QML 模型数据

Ale*_*xes 5 c++ qml qt5

我有基于 QAbstractListModel 的模型...

class RecordModel : public QAbstractListModel { ... };

QQmlContext *ctxt = engine.rootContext();
ctxt->setContextProperty("recordModel", &model);

// QML
recordModel.get(0).name // now work
Run Code Online (Sandbox Code Playgroud)

如何通过索引和角色名称获取模型数据?

...解决方案

// C++
class RecordModel : public QAbstractListModel
{
   Q_OBJECT
   Q_ENUMS(Roles)

   public:
      // ...
      Q_INVOKABLE QVariant data(int i, int role) const
      {
          return data(index(i, 0), role);
      }
};

// QML
recordModel.data(0, RecordModel.NameRole);
Run Code Online (Sandbox Code Playgroud)

kap*_*ppa 1

您可以使用 Q_INVOKABLE 方法:

Q_INVOKABLE QVariant getRecord(int iIndex)
{
    return QVariant::fromValue<CRecord*>((CRecord*)this->at(iIndex));
}
Run Code Online (Sandbox Code Playgroud)

然后在 QML 中:

recordModel.getRecord(0)
Run Code Online (Sandbox Code Playgroud)

您只需要声明一个元类型:

Q_DECLARE_METATYPE( RecordModel* )
Run Code Online (Sandbox Code Playgroud)

main.cpp 中的某处:

qmlRegisterType<RecordModel>("PrivateComponents", 1, 0, "RecordModel");
qmlRegisterType<CRecord>("PrivateComponents", 1, 0, "CRecord");
Run Code Online (Sandbox Code Playgroud)