1

考虑通过仅实现纯函数定义的普通 类。ModelQAbstractItemModel

我必须用饼图显示模型(就像在这个例子中一样),我想从它派生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,但它几乎没有告诉你应该返回什么值)?我可以忽略他们,我正在做的事情,而不是期待反响吗?

4

1 回答 1

2

由于您是自己视图的用户,这完全取决于您。如果您不想拥有一个功能齐全的视图,没关系。这些函数用于选择以及与视图中的项目进行键盘/鼠标交互。如果您不需要它,可以不提供该功能。

在许多不支持除了滚动之外的交互的只读视图中,从 a 派生QAbstractItemView是毫无意义的。我有一个我使用的内部类。恕我直言,Qt 应该进一步拆分 QAbstractItemView 类,以便无交互视图可以使用更简单的东西。

Qt 本身提供了许多未实现的视图这一事实可能会让您放心QAbstractItemView。就像每个 QML 视图一样 :)

“视图”的最低要求是它源自QObject. 毕竟,您可以拥有非 gui 的“视图”,它使用来自某个模型的数据。代理模型是这样的:它们是附加到模型的无 gui 视图,同时也是模型本身。对于源模型,代理就像一个视图。在用户看来,代理就像一个模型。

于 2013-09-05T19:10:39.447 回答