如何在不注册对象的情况下访问标准项模型的数据?
How do I access a StandardItemModel's data without registering the object?
我有一个嵌套的列表视图结构,其中存储了包含列表视图的子级的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);
行。
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- QTableView:endMoveRows在模型中重置水平页眉大小
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- 目标c是否需要一个标准来定义像c++11这样的内存模型
- 如何在不注册对象的情况下访问标准项模型的数据?
- 标准项目模型 Qt.
- 在OpenGL 4.0中,是否有一种围绕局部坐标(即从模型视图矩阵)旋转的标准方法