Qt 两个QStandardItem对象能否处理同一对象的不同属性?

Qt 两个QStandardItem对象能否处理同一对象的不同属性?,qt,qstandarditemmodel,qstandarditem,Qt,Qstandarditemmodel,Qstandarditem,我是Qt模型/视图编程的新手,已经阅读了Qt文档中的。本例中的一个很好的特性是,单个对象(TreeItem)封装了两条信息,这些信息随后显示在包含两列(name和description)的一行中由于覆盖了QModelIndex qabstractemmodel::index和QVariant qabstractemmodel::data 现在,我还有一个自定义类(例如,Foo),其中包含两条信息(Foo::m_name和Foo::m_description),我希望在包含两列的单行中显示它们,但

我是Qt模型/视图编程的新手,已经阅读了Qt文档中的。本例中的一个很好的特性是,单个对象(
TreeItem
)封装了两条信息,这些信息随后显示在包含两列(
name
description
)的一行中由于覆盖了
QModelIndex qabstractemmodel::index
QVariant qabstractemmodel::data

现在,我还有一个自定义类(例如,
Foo
),其中包含两条信息(
Foo::m_name
Foo::m_description
),我希望在包含两列的单行中显示它们,但是,我不想子类化
QAbstractItemModel
,而是想子类化
QStandardItemModel
,因为它有很多功能。但是,似乎我必须为每个
Foo
对象创建两个
QStandardItem
对象,一个用于处理
m\u name
,另一个用于处理
m\u description
。如何在内存中保留单个
Foo
对象,并让这两个
QStandardItem
对象引用它


在我的问题中,有一个隐含的假设,即必须为每个(行、列)对创建一个
QStandardItem
对象。如果这是错误的,请告诉我。

QStandardItemModel
是关于在模型中存储数据的,因此每个单元格都由保存该单元格数据的
QStandardItem
表示

如果数据已存储在其他位置,不应重复,则
QStandardItemModel
是错误的方法,而自定义模型是可行的方法

对于从
qabstractemmodel
派生的树结构,自定义模型只是视图和数据之间的一个接口,因此数据在内存中只驻留一次。

建议参见和的第4章,这里讨论了树的子分类
QstandardItemModel
QStandardIteml
,其中树的每一行由三个
QstandardItem
组成,处理单个对象的不同属性。 实现源代码是

基本上,我们有:

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;  
  }
}
class myModel:公共QStandardItemModel{
StandardItem*myModel::appendRow(QStandarItem*parent、Foo和afoo)
{
自动*doublet=新的myItem(afoo);

parent->appendRow(QList()我已经声明了
Q\u DECLARE\u元类型(Foo*)
并在
QStandardItem
中存储了
QVariant
,以避免存储
Foo
对象。然而,这仍然导致我必须为每个
Foo
对象实例化两个
QStandardItem
对象,我希望有一些设计上的变通方法。正如我所说的:
QStandardItem模型使用ne
QStandardItem
每单元作为其设计原则。其用例是将数据存储在模型中,而不是作为存储在别处的数据的接口。