我在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]
}
}
}
作为模型吗?我以为可以,因为它被列为简单的列表类型。
答案 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
}
}
}