QList <qstring>未被QML ListView用作模型

时间:2018-08-15 16:46:57

标签: c++ qt qml qtquick2

我在Q_PROPERTY类中有一个类型为QList<QString>的{​​{1}},在QML中没有显示。该类如下所示:

c++

使用class FooView : public QQuickItem { Q_OBJECT; Q_PROPERTY(QList<QString> myStrings READ myStrings NOTIFY myStringsChanged); private: QList<QString> m_strings; public: FooView(QQuickItem * parent) : QQuickItem(parent), m_strings() { m_strings << "String one" << "String two"; } QList<QString> myStrings() const { return m_strings; } signals: void myStringsChanged(); }; 将上述类注册为QML类型。我尝试将属性用作qmlRegisterType的模型,如下所示:

ListView

您不能使用FooView { id: 'foo' ListView { anchors.fill: parent model: foo.myStrings delegate: Text { text: "Hi" // to be replaced with foo.myStrings[index] } } } 作为模型吗?我以为可以,因为它被列为简单的列表类型。

1 个答案:

答案 0 :(得分:2)

首先使用QStringList代替QList<QString>

class FooView : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(QStringList myStrings READ myStrings NOTIFY myStringsChanged)
    QStringList m_strings;
public:
    FooView(QQuickItem * parent=nullptr) :
        QQuickItem(parent)
    {
        m_strings << "String one" << "String two";
    }
    QStringList myStrings() const {
        return m_strings;
    }
signals:
    void myStringsChanged();
};

要解决的问题,当模型是docs所指示的列表时,必须使用modelData

  

没有命名角色的模型(例如显示的ListModel   下方)将具有通过modelData角色提供的数据。的   还为只有一个角色的模型提供了modelData角色。在   在这种情况下,modelData角色包含的数据与命名角色相同。


FooView {
    id: foo
    anchors.fill: parent
    ListView {
        anchors.fill: parent
        model: foo.myStrings
        delegate: Text {
            text: modelData
        }
    }
}