如何在不注册对象的情况下访问StandardItemModel的数据?

时间:2018-12-31 21:39:58

标签: c++ qt listview qml

我有一个嵌套的listview结构,用于存储包含一个listview的子级的QAbstractItemModels的映射。我可以使用称为“ subModelFromId”的可调用方法来收集正确的模型,但是我无法显示该模型中的数据。

该模型似乎正确,因为列表视图显示了适当数量的项目...

我不希望使用“ setContextProperty”函数在C ++中注册每个模型,但这也许是必不可少的吗?是否可以在不注册每个模型的情况下访问模型中的数据?

QML:

ListView {
    model: items.subModelFromId(delegateID.id)
    delegate:

        ItemDelegate{
        Text {
            text: edit.name //????? Not working
       }
    }

C ++填充模型:

QAbstractItemModel * subModel = new QStandardItemModel(this);
    const int newRow= subModel->rowCount();
    const SequenceItem newSequenceItem("PM Setup","sequence", false, "pm_setup", "done");
    subModel->insertRow(newRow);
    subModel->setData(subModel->index(newRow,0),QVariant::fromValue(newSequenceItem),Qt::EditRole);

    const int newRow2= subModel->rowCount();
    const SequenceItem newSequenceItem2("Test 1","test", false, "test 1", "done");
    subModel->insertRow(newRow2);
    subModel->setData(subModel->index(newRow2,0),QVariant::fromValue(newSequenceItem2),Qt::EditRole);

    m_subModelMap.insert("PM_ID", subModel);

SequenceItem.h:

#ifndef SEQUENCE_ITEM_H
#define SEQUENCE_ITEM_H

#include <QObject>

#include "sequence_items.h"

class SequenceItem
{
    Q_GADGET
    Q_PROPERTY(QString name READ getName WRITE setName)
    Q_PROPERTY(QString status READ getStatus WRITE setStatus)
    Q_PROPERTY(bool checkedStatus READ getCheckedStatus WRITE setCheckedStatus)
    Q_PROPERTY(QString id READ getID WRITE setID)
    Q_PROPERTY(QString type READ getType WRITE setType)


public:
    SequenceItem();
    SequenceItem(const QString& name , const QString&  type, bool checkedStatus, const QString&  id, const QString&  status );

    QString getName() const;
    void setName(const QString &name);

    bool getCheckedStatus() const;
    void setCheckedStatus(bool checkedStatus);

    QString getID() const;
    void setID(const QString &ID);

    QString getStatus() const;
    void setStatus(const QString &status);

    QString getType() const;
    void setType(const QString &type);

private:
    QString m_name;
    bool m_checkedStatus;
    QString m_ID;
    QString m_status;
    QString m_type;
};

#endif // SEQUENCE_ITEM_H

1 个答案:

答案 0 :(得分:1)

您忘记了在模型中也创建一列,因此对export的两次调用均失败,如它们的返回值所示。您需要做的就是在创建商品模型的行setData之后添加行subModel->insertColumn(0);