我有基于 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)
您可以使用 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)
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |