两个 QStandardItem 对象可以处理同一对象的不同属性吗?
Can two QStandardItem objects handle different attributes from the same object?
我是 Qt Model/View 编程的新手,并且阅读了 Qt 文档中的 Editable Tree Model Example。此示例中的一个很好的功能是单个对象 (TreeItem
) 封装了两条信息,这些信息后来显示在包含两列 (name
和 description
) 的一行中,这要归功于覆盖QModelIndex QAbstractItemModel::index
和 QVariant QAbstractItemModel::data
.
现在,我还有一个自定义 class(例如 Foo
),其中包含两条信息(Foo::m_name
和 Foo::m_description
),我想在包含两列的单行,但不是 subclassing QAbstractItemModel
我想 subclass QStandardItemModel
因为它有很多功能。但是,我似乎必须为每个 Foo
对象创建两个 QStandardItem
对象,一个处理 m_name
,另一个处理 m_description
。如何在内存中保留一个 Foo
对象并让这两个 QStandardItem
对象引用它?
在我的问题中有一个隐含的假设,即必须为每个(行、列)对创建一个 QStandardItem
对象。如果这有误,请告诉我。
QStandardItemModel
就是将数据存储在模型中,因此每个单元格都由一个 QStandardItem
表示,其中包含该单元格的数据。
如果数据已经存储在别处并且不应被复制,那么 QStandardItemModel
是错误的方法,自定义模型是可行的方法。
在派生自 QAbstractItemModel
的树结构的情况下,自定义模型只是视图和数据之间的接口,因此数据仅在内存中驻留一次。
A post in qtcentre suggested Chapter 4 of Advanced Qt Programming 你瞧,有一个关于树子类 QstandardItemModel
和 QStandardIteml
的讨论,其中树的每一行由三个 QstandardItem
处理组成单个对象的不同属性。
实现源码为freely available
基本上,一个有:
class myItem : public QStandardItem {
public:
myItem(Foo &afoo) : QStandardItem(afoo.getName()), m_foo(afoo) {
m_description = new QStandardItem(afoo.getDescription());
}
QstandardItem *m_description; // display m_description
private:
Foo &m_foo;
};
然后我们在模型树中插入一行两个 QstandardItem
class myModel: public QStandardItemModel {
StandardItem *myModel::appendRow(QStandardItem *parent, Foo &afoo)
{
auto *doublet = new myItem(afoo);
parent->appendRow(QList<QStandardItem*>() << doublet
<< double->m_description);
return nameItem;
}
}
我是 Qt Model/View 编程的新手,并且阅读了 Qt 文档中的 Editable Tree Model Example。此示例中的一个很好的功能是单个对象 (TreeItem
) 封装了两条信息,这些信息后来显示在包含两列 (name
和 description
) 的一行中,这要归功于覆盖QModelIndex QAbstractItemModel::index
和 QVariant QAbstractItemModel::data
.
现在,我还有一个自定义 class(例如 Foo
),其中包含两条信息(Foo::m_name
和 Foo::m_description
),我想在包含两列的单行,但不是 subclassing QAbstractItemModel
我想 subclass QStandardItemModel
因为它有很多功能。但是,我似乎必须为每个 Foo
对象创建两个 QStandardItem
对象,一个处理 m_name
,另一个处理 m_description
。如何在内存中保留一个 Foo
对象并让这两个 QStandardItem
对象引用它?
在我的问题中有一个隐含的假设,即必须为每个(行、列)对创建一个 QStandardItem
对象。如果这有误,请告诉我。
QStandardItemModel
就是将数据存储在模型中,因此每个单元格都由一个 QStandardItem
表示,其中包含该单元格的数据。
如果数据已经存储在别处并且不应被复制,那么 QStandardItemModel
是错误的方法,自定义模型是可行的方法。
在派生自 QAbstractItemModel
的树结构的情况下,自定义模型只是视图和数据之间的接口,因此数据仅在内存中驻留一次。
A post in qtcentre suggested Chapter 4 of Advanced Qt Programming 你瞧,有一个关于树子类 QstandardItemModel
和 QStandardIteml
的讨论,其中树的每一行由三个 QstandardItem
处理组成单个对象的不同属性。
实现源码为freely available
基本上,一个有:
class myItem : public QStandardItem {
public:
myItem(Foo &afoo) : QStandardItem(afoo.getName()), m_foo(afoo) {
m_description = new QStandardItem(afoo.getDescription());
}
QstandardItem *m_description; // display m_description
private:
Foo &m_foo;
};
然后我们在模型树中插入一行两个 QstandardItem
class myModel: public QStandardItemModel {
StandardItem *myModel::appendRow(QStandardItem *parent, Foo &afoo)
{
auto *doublet = new myItem(afoo);
parent->appendRow(QList<QStandardItem*>() << doublet
<< double->m_description);
return nameItem;
}
}