在QStandardItemModel中存储自定义对象
Storing custom objects in QStandardItemModel
我想在树结构中存储自定义对象(假设是MyDataClass的实例),并与视图链接。所以我使用了QStandardItemModel。我认为MyDataClass应该继承自QStandardItem:
class MyDataClass : public QStandardItem
{
public:
MyDataClass(QString name)
private:
vector<float> someData;
}
但是我不知道如何在QStandardItemModel
中存储该类的实例。我尝试了QStandardItem.setChild
,然后appendRow
,但它不起作用,我想我没有真正得到QStandardItemModel的东西。我认为解决方案处理QStandardItem.setData
,但我无法弄清楚它是如何为自定义对象工作的。
我终于使它工作使用QVariant
。使用自定义数据填充模型:
MyDataClass *data;
... // adding some data
QVariant variant;
variant.setValue(data);
QStandardItemModel model; // here is your model
QStandardItem *parentItem = model.invisibleRootItem();
QStandardItem *item = new QStandardItem();
item->setData(variant);
parentItem->setChild(0, 0, item); // adding the item to the root
稍后,当您想要检索数据时:
MyDataClass *retrievedData = model.invisibleRootItem()->
child(0, 0)->data().value<MyDataClass*>();
注意,我必须在类声明中添加一行:
class MyDataClass : public QStandardItem
{
public:
MyDataClass(QString name)
private:
vector<float> someData;
}
Q_DECLARE_METATYPE(MyDataClass *) // add this line
谢谢你的帮助。
您可以使用QStandardItemModel::setItemPrototype
。
http://qt project.org/doc/qt - 4.8 -/- qstandarditemmodel.html # setItemPrototype
- 继承QStandardItem并重新实现方法
clone
。 - 创建一个新的物品实例并传递给
setItemPrototype
。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 如何在包含自定义对象的容器中使用分区函数C++
- 如何在具有多个成员的自定义对象的向量上使用查找
- std::vector 如何支持未知大小的自定义对象的连续内存
- 将指针的QVECTOR分类到自定义对象
- (C )正在创建专门用于处理所有其他自定义对象的类/对象一种处理项目的正确方法
- C soci查询到自定义对象的向量