如何创建用于QML的通用对象模型?

如何创建用于QML的通用对象模型?

我想知道是否有任何宏或方法将Qt模型注册为QObject的属性。

例如,我有AnimalModel (http:/doc.qt.io/qt-5/qtQuick-Modelviewsdata-cppmodel s.html#qabopactitemmodel).

我知道我可以把它传递给QuickView的根上下文

QuickView view;view.rootContext()->setContextProperty("myModel", &model);

如果我通过QML宏注册了QObject,我也可以传递这个对象来查看:

view.rootContext()->setContextProperty("obj", pDataObject);

但是,如果我想要QObject,它包含任何数据的模型,该怎么办?

例如:

class DataObject : public QObject{
    Q_OBJECT

    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
    Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
    ...

    AnimalModel m_modelAnimals;

    //Is this possible in any way?
    //Q_PROPERTY(AnimalModel modelAnimals READ modelAnimals NOTIFY modelAnimalsChanged)};

到目前为止,我找到的每一个例子都显示了如何通过QAbstractListModel到根上下文。但没有人将其用作QObject属性。

(我知道有QQmlListPropertyQQmlListProperty不支持部分刷新。总是有必要重建所有QML对象)


有只小跳蛙
浏览 467回答 3
3回答

RISEBY

这绝对是杰作。我上个月和半个月都在学习QML,我不知道它能以这么好的方式结合在一起。谢谢你的解释和例子。我脑子里唯一的问题。为什么QHashMap是静态PTR而不是静态PTR?可以把它定义为static QHash<int, QByteArray> roles = { { ObjectRole, "object" } };但它需要c+11
打开App,查看更多内容
随时随地看视频慕课网APP