如果我不想在QAbstractItemView中实现选择,我应该返回什么值?

时间:2013-09-05 18:52:20

标签: c++ qt

考虑通过实现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但它几乎没有告诉你应该返回什么值?我可以忽略它们,我正在做的事情,而不是期待反响吗?

1 个答案:

答案 0 :(得分:2)

由于您是自己视图的用户,因此完全取决于您。如果您不想拥有功能齐全的视图,那就没关系。这些函数用于选择和键盘/鼠标与视图中的项目交互。如果你不需要,可以不提供这种功能。

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

Qt本身提供了大量未实现QAbstractItemView的视图,这可能让您感到放心。像每个QML视图一样:))

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

相关问题