按索引列出的 QML 模型数据

2024-04-16

我有基于 QAbstractListModel 的模型...

class RecordModel : public QAbstractListModel { ... };

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

// QML
recordModel.get(0).name // now work

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

... Solution:

// 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);

您应该仅将 Q_INVOKABLE 方法用于您希望能够从 QML 调用的特定功能。除非您想在无法访问的情况下访问模型数据delegate对于您的模型,您应该始终使用更合适的模型委托方式来获取数据。

由于您继承自 QAbstractListModel,因此它将像 QAbstractItemModel 一样工作。

声明角色如图所示:

enum Roles {
    RoleA = Qt::UserRole + 1,
    RoleB = Qt::UserRole + 2
};

重写此方法以允许使用角色进行 QML 访问:

QHash<int, QByteArray> RecordModel::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[RoleA] = _Ut("roleA");
    roles[RoleB] = _Ut("roleB");
    return roles;
}

当 QML 尝试访问时覆盖此方法以返回数据:

QVariant RecordModel::data(const QModelIndex &modelIndex, int role) const
{
    QVariant rv;
    int index = modelIndex.row();

    switch( role ) {
    case RoleA:
        rv = "A";
        break;
    case RoleB:
        rv = "B";
        break;
    default:
        DASSERT(FALSE);     // Unexpected role.
        break;
    }

    return rv;
}

然后,在 QML 中,您只需在使用此模型访问数据的 QML 元素的委托中使用“roleA”和“roleB”。

参考:

http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html

http://qt-project.org/doc/qt-5.0/qtcore/qabstractlistmodel.html http://qt-project.org/doc/qt-5.0/qtcore/qabstractlistmodel.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按索引列出的 QML 模型数据 的相关文章

随机推荐

  • sqlite python 插入

    我以前问过类似的问题 这里是我想要实现的目标的详细解释 我有两个 sqlite 表table1 是标准表 具有服务器 id 状态等字段 table2 具有服务器 id 状态 数字 日志文件等字段 Table2 为空 Table1 有值 我正
  • 获取连接的mysql数据库名称(JDBC)

    如何从连接对象中获取数据库名称 try this ds DataSource new InitialContext lookup java comp env jdbc amger catch NamingException ne Conne
  • 使用 ZXing 和 ZBar 的 GS1 应用程序标识符数据中缺少 AIM 符号标识符

    我正在尝试验证使用 ZXing 或 ZBar 扫描的 GS1 条形码 这GS1 一般规格 http www gs1 org docs gsmp barcodes GS1 General Specifications pdf7 8 中说 GS
  • 验证:如何检查特定错误

    我知道如何检查属性是否有错误 post errors title any 是否可以检查哪个验证失败 例如 唯一性 最近我遇到了一种情况 我需要同样的东西 用户可以从一个表单一次添加 编辑多个记录 由于在验证时并非所有记录都已写入数据库 我无
  • iOS 应用程序因 [UIFeedbackGenerator _autoDeactivate] 崩溃

    我收到了来自 Crashlytics 的以下报告 我没有打电话 UIFeedbackGenerator autoDeactivate 我 也许某个图书馆正在这样做 我做了一些研究 但找不到任何有用的信息 有谁知道这个崩溃报告是什么意思 谢谢
  • 如何保证mongoDb中数据的完整性?

    我正在尝试从关系数据库 mysql 数据迁移到nosql mongoDb 但是我如何确保 mongodb 中的数据完整性 我发现我们无法在服务器端做到这一点 我应该在应用程序端使用什么来处理数据完整性 例如 我有两个表 user 和 tas
  • ActionBarActivity getSupportActionBar().hide() 抛出 NullPointerException

    Call if getSupportActionBar null getSupportActionBar hide 要不就 getActionBar 在 android support v7 app ActionBarActivity 我得
  • RSpec 失败:迁移后找不到表...?

    我有一个带有一个模型的裸轨 3 应用程序 使用生成rails g model User 我添加了一个工厂 使用factory girl rails Factory define user do f f email email protect
  • AngularJS 中的“命名空间”服务

    AngularJS 如何处理服务名称之间的冲突 例如 如果我声明了两个模块 每个模块都包含一个名为 foo 的服务 如果我想创建可重用模块或想避免与其他第三方模块发生冲突 命名空间 服务的好方法是什么 截至目前 AngularJS 不处理服
  • Android面向对象编程

    我正在使用 Eclipse 在 Android 中进行一些基本编程 我目前正在翻阅一本书并使用书中编写的一些示例代码 我注意到 在这本书中 迄今为止的所有示例都在主要活动中进行 我不认为这是很好的面向对象编程实践 因为我来自传统的 Java
  • Linux 与 Windows std::map 赋值构造函数(为什么有这样的差异?)

    我在 Linux Ubuntu 中编写的 C 应用程序中目睹了一些意外行为 我将构造一个带有参数的对象 然后使用赋值运算符将该对象的副本放入 std map 中 我写了一个简单的程序来演示这种情况 include
  • 是否只有当 Maven 中的特定配置文件处于活动状态时才可以使用代理?

    我想仅在特定配置文件处于活动状态时使用代理 为了实现这一点 我的猜测是参数化
  • 当我在 MATLAB 中循环绘图时如何给出不同的颜色?

    我有一些数据说 X 的大小为 100 2 该 X 由 10 个类别的数据组成 一组 10 个 现在我想查看每个类别的数据模式 为此 我需要为每个类别分配不同的颜色 我正在尝试循环而不是绘制 10 个不同的图 我尝试了以下 hold on f
  • vba 在非连续范围内循环

    我的行有一个不连续的范围 myRange 的示例地址 2 2 4 205 214 214 我想访问该范围内的特定行和列 我已经尝试过以下方法 获取范围内第2行第1列的值 myRange rows 2 Cells 1 Value 但是 这给了
  • 如何在类型方法中使用另一个类方法和 this 上下文?

    我想在 TypeScript 中进一步重写 JavaScript 方法 我很想在课堂上这样做 如下所示 export default class export default class GroupItemMetadataProvider1
  • 如何将await.WhenAny() 与GetAwaiter 扩展方法结合起来

    我想要await a button click 事件 为此创建了一个扩展GetAwaiter method public static class ButtonAwaiterExtensions public static ButtonAw
  • 如何获取foreign_key列的名称

    我正在使用 Rails 3 并且有一个简单的模型 class Post has many comments end 我正在做一些元编程 我需要知道注释表中的foreign key的名称 在上面的例子中 答案是 post id 然而它可以是任
  • Tomcat web.xml 文档

    我在将 Java 应用程序部署到 Tomcat 时遇到一些问题 我想查看 web xml 的文档在哪里 我好像找不到啊 我正在使用标准 web xml 但我想知道所有特定 xml 标签的含义 当然 通常使用标准的 web xml 就可以了
  • jsFiddle 可以被索引还是我可以将我的代码保密? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我担心在小提琴 jsFiddle 中使用一些数据 因为这些数据不应该公开 Google 可以索引 jsFiddle 吗 我保存了小提琴 但我没有保存它
  • 按索引列出的 QML 模型数据

    我有基于 QAbstractListModel 的模型 class RecordModel public QAbstractListModel QQmlContext ctxt engine rootContext ctxt gt setC