这是一个已经解决的问题的后续问题。
我的模型有一些自定义函数,这些函数在我的树视图中被调用。例如,我的ItemModel
类中有两个自定义函数:
class ItemModel : public QAbstractItemModel
{
// ...
Q_INVOKABLE void addExpandedItem(const QModelIndex &index);
Q_INVOKABLE void removeExpandedItem(const QModelIndex &index);
}
在ParentClass
:中使用ItemModel
类作为sceneModel
属性
class ParentClass : public QObject
{
Q_OBJECT
Q_PROPERTY(ItemModel * sceneModel READ sceneModel CONSTANT)
private:
ItemModel *m_sceneModel;
}
在我的QML树视图中,我调用/那些自定义函数,如:
TreeView {
model: parentClass.sceneModel
selection: ItemSelectionModel {
model: parentClass.sceneModel
}
onExpanded: {
model.addExpandedItem(index) // Calling custom function
}
onCollapsed: {
model.removeExpandedItem(index) // Calling custom function
}
}
现在,当我打算像原来的问题中所描述的那样通过QSortFilterProxyModel
过滤我的模型时,我在通过QSortFilterProxyModel
代理模型调用那些自定义函数时遇到了问题。我收到这样的错误:
qrc:/.../...Tree.qml:191: TypeError: Property 'addExpandedItem' of object QSortFilterProxyModel(0x1f197c082c0) is not a function
因此,我想知道如何通过QSortFilterProxyModel
代理模型调用我的模型的自定义函数。
在父类的Q_PROPERTY
中将其更改为QVariant
。Getter函数应该像这样返回类实例:
return QVariant::fromValue(m_sceneModel);
当我这样做的时候,它是有效的。此外,您确定TreeView
将QModelIndex
传递给您的方法吗?据我所知,它只通过int
,而真正的模型索引只能通过C++data
函数访问。