我有一个名为Patients
的自定义类型(请忽略复数错误)。我想在我的cpp中创建一个QList<Patients*>
并从我的QML中使用它。我正在关注here的模式,但它无效。
这是我的Patients.h(可能比需要的更多信息)。 。
class Patients : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ getName)
Q_PROPERTY(QString email READ getEmail)
Q_PROPERTY(int id READ getId)
public:
explicit Patients(QObject *parent = 0);
explicit Patients(int id, QString name, QString email, QObject *parent = 0);
QString getName() const;
QString getEmail() const;
int getId() const;
private:
QString email, name;
int id;
};
这是主要的cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
QList<Patients*> lst;
lst.append(new Patients(0, QString("abe"), QString("albert")));
QQmlContext *ctx = engine.rootContext();
ctx->setContextProperty("pLst", QVariant::fromValue(lst));
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
这是qml。 。 。
ListView{
id: lst
height: 100; width: 100
anchors.fill: parent
x: 100; y: 100
model: pLst
delegate: Text{
text: model.modelData.name
}
}
当我绑定单个对象时,它可以工作,但不能作为列表。即使在index
内展示Text
也行不通。没有错误消息或任何内容。
答案 0 :(得分:3)
QML中的QList
容器没有普遍支持,即使它所持有的类型已注册到Qt的元系统。默认情况下支持某些特殊变体(例如QStringList
QList<QObject*>
),因此如果您的类派生自QList<QObject*>
,则可以使用QObject
。
如果您的类型不是来自QObject
,或者您希望保持C ++中的界面干净且类型安全,我建议使用QQmlListProperty
。请注意,如果您不想在QML中修改列表,则不必实施append()
或clear()
方法。
答案 1 :(得分:0)
事实证明我必须将列表声明为
QList<QObject*> lst;
答案 2 :(得分:0)
您将使用QQmlListProperty
定义新类,并定义容器数据对象(此类将继承自QObject
),在QQmlListProperty
类中您将定义容器{{ 1}} QList
的指针。我写了两篇关于这个主题的帖子: