无法访问 ListView 中的 QAbstractListModel 数据

Can't access QAbstractListModel data in ListView

我有 Foo class 派生自 QAbstractListModel。和 Bar class 我在 qml 中注册和创建的。栏 class 包含 Foo 公开为 属性 的对象。

class Foo : public QAbstractListModel
{
    Q_OBJECT
public:
    explicit Foo(QObject *parent = nullptr) : QAbstractListModel(parent) {
        mList.append("test1");
        mList.append("test2");
        mList.append("test3");
    }

    virtual int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE {
        return mList.count();
    }
    virtual QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE {
        return mList.at(index.row());
    }
private:
    QStringList mList;
};

class Bar : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(Foo* foo READ foo NOTIFY fooChanged)

public:
    explicit Bar(QQuickItem *parent = nullptr)
        : QQuickItem(parent) {
        mFoo = new Foo(this);
    }

    Foo *foo() const { return mFoo; }

signals:
    void fooChanged(Foo *foo);

private:
    Foo *mFoo;
};

注册Bar类型:

qmlRegisterType<Bar>("Custom", 1, 0, "Bar");

qml:

import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
import Custom 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    ListView {
        id: someList
        model: bar.foo
        delegate: Text {
            text: modelData
        }
    }

    Bar {
        id: bar
    }
}

我创建 ListView 并分配模型 Foo。 预期结果是看到委托文本填充 "test1"、"test2"、"test3" 但我得到这个:

ReferenceError: modelData is not defined
ReferenceError: modelData is not defined
ReferenceError: modelData is not defined

QML引擎是对的,modelData没有定义。在委托中,model 的定义不是 modelData

此外,由于在您的 QAbstractListModel 中您没有定义自己的 角色 ,您可以使用默认的 角色 display 是您可以使用的默认角色。所以,你的 ListView 应该是这样的:

ListView {
    id: someList
    model: bar.foo
    delegate: Text {
        text: model.display
    }
}