Qt 两个QStandardItem对象能否处理同一对象的不同属性?
我是Qt模型/视图编程的新手,已经阅读了Qt文档中的。本例中的一个很好的特性是,单个对象(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),我希望在包含两列的单行中显示它们,但
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模型使用neQStandardItem
每单元作为其设计原则。其用例是将数据存储在模型中,而不是作为存储在别处的数据的接口。