考虑通过实现Model
中的纯函数定义的普通 QAbstractItemModel
类。
我必须使用饼图显示模型(如this example中所示)并且我想从QAbstractItemView
派生并重新实现其受保护的插槽。
事实是QAbstractItemView
迫使我实现其他纯虚函数:
virtual QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers);
virtual int horizontalOffset() const;
virtual int verticalOffset() const;
virtual bool isIndexHidden(const QModelIndex&) const;
virtual void setSelection(const QRect&, QItemSelectionModel::SelectionFlags);
virtual QRegion visualRegionForSelection(const QItemSelection&) const;
virtual QRect visualRect (const QModelIndex&) const;
virtual void scrollTo(const QModelIndex&, ScrollHint);
virtual QModelIndex indexAt(const QPoint&) const;
大多数此功能在我的情况下都是无用的,截至目前我正在返回0
,默认值(例如return QRect();
)或无效值(例如return QModelIndex()
)。
我的问题是:这些函数应该用于什么(是的我RTFM但它几乎没有告诉你应该返回什么值?我可以忽略它们,我正在做的事情,而不是期待反响吗?
答案 0 :(得分:2)
由于您是自己视图的用户,因此完全取决于您。如果您不想拥有功能齐全的视图,那就没关系。这些函数用于选择和键盘/鼠标与视图中的项目交互。如果你不需要,可以不提供这种功能。
在许多只支持除了滚动之外的交互的只读视图中,从QAbstractItemView
派生是没有意义的。我有一个我用的内部课程。恕我直言,Qt应进一步拆分QAbstractItemView类,以便无交互视图可以使用更简单的东西。
Qt本身提供了大量未实现QAbstractItemView
的视图,这可能让您感到放心。像每个QML视图一样:))
“视图”的最低要求是它来自QObject
。毕竟,你可以使用非gui“视图”来消耗某些模型的数据。代理模型是这样的:它们是附加到模型的无需视图,同时也是模型本身。对于源模型,代理就像一个视图。对于用户视图,代理就像一个模型。