两个QStandardItem对象可以处理来自同一个对象的不同属性吗?
我是Qt模型/视图编程的新手,并已阅读Qt文档中的Editable Tree Model Example。此示例中的一个很好的功能是,由于重写了QModelIndex QAbstractItemModel::index
和QVariant QAbstractItemModel::data
,单个对象(TreeItem
)封装了后面显示在包含两列(name
和description
)的单行中的两条信息。现在两个QStandardItem对象可以处理来自同一个对象的不同属性吗?
,我也有一个自定义类(如Foo
)包含的信息(Foo::m_name
和Foo::m_description
)两片,我想在包含两列单行来显示,但不是子类QAbstractItemModel
我想继承QStandardItemModel
因为它有很多功能。但是,似乎我必须为我的每个Foo
对象创建两个QStandardItem
对象,一个处理m_name
,另一个处理m_description
。我如何在内存中保留一个Foo
对象并让这两个QStandardItem
对象引用它?
在我的问题有一个必须为每个(行,列)对创建QStandardItem
对象隐含的假设。请让我知道如果这是错误的。
A post in qtcentre建议Advanced Qt Programming和LO的第4章,不料,有一棵树subsclassing 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;
}
}
QStandardItemModel
是关于将数据存储在模型中的,所以每个单元都由包含该单元数据的QStandardItem
表示。
如果数据已经存储在其他地方并且不应该被复制,那么QStandardItemModel
是错误的方法,并且定制模型是要走的路。
自定义模型(在衍生自QAbstractItemModel
的树结构的情况下)只是视图和数据之间的接口,因此数据只在内存中驻留一次。
我宣布'Q_DECLARE_METATYPE(富* )并在'QStandardItem'中存储'QVariant'以避免存储'Foo'对象。然而,这仍然使我不必实例两个'QStandardItem'对象为每个'Foo'对象,我希望有一些设计上的解决方法。 –
jmborr
正如我说:'在使用QStandardItemModel'每单元一个'QStandardItem'作为其设计原则。它的用例是将数据存储在模型中,而不是作为存储在别处的数据的接口。 –