如何在不注册对象的情况下访问标准项模型的数据?

How do I access a StandardItemModel's data without registering the object?

本文关键字:标准 模型 数据 访问 情况下 注册 对象      更新时间:2023-10-16

我有一个嵌套的列表视图结构,其中存储了包含列表视图的子级的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

您忘记在模型中创建一列,因此两个对setData的调用都失败了,正如它们的返回值所示。您所需要更改的只是在创建项目模型的QAbstractItemModel * subModel = new QStandardItemModel(this);行之后添加subModel->insertColumn(0);行。