我有一个嵌套的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
答案 0 :(得分:1)
您忘记了在模型中也创建一列,因此对export
的两次调用均失败,如它们的返回值所示。您需要做的就是在创建商品模型的行setData
之后添加行subModel->insertColumn(0);
。