文章目录
QAbstractItemView 类
QAbstractItemView类提供了项视图类的基本功能。
Header: | #include < QAbstractItemView > |
---|---|
qmake: | QT += widgets |
Inherits: | QAbstractScrollArea |
Inherited By: | QColumnView, QHeaderView, QListView, QTableView, and QTreeView |
详述
QAbstractItemView类是每个使用QAbstractItemModel的标准视图的基类。QAbstractItemView是一个抽象类,本身不能实例化。它为通过信号和插槽机制与模型进行交互提供了一个标准接口,使子类能够随着模型的变化而保持最新。这个类提供了对键盘和鼠标导航、视口滚动、项目编辑和选择的标准支持。键盘导航实现了这个功能:
Keys | Functionality |
---|---|
Arrow keys | 更改当前项并选择它。 |
Ctrl+Arrow keys | 更改当前项,但不选择它。 |
Shift+Arrow keys | 更改当前项并选择它。先前选定的项目不会被取消。 |
Ctr+Space | 切换当前项的选择。 |
Tab/Backtab | 将当前项更改为下一个/前一个项。 |
Home/End | 选择模型中的第一/最后一项。 |
Page up/Page down | 根据视图中可见的行数向上/向下滚动行。 |
Ctrl+A | 选择模型中的所有项。 |
注意,上面的表假设选择模式允许操作。例如,如果选择模式是QAbstractItemView::NoSelection,则无法选择项目。
QAbstractItemView类是模型/视图类之一,是Qt的模型/视图框架的一部分。
继承QAbstractItemView的视图类只需要实现它们自己特定于视图的功能,比如绘制项目、返回项目的几何形状、查找项目等。
QAbstractItemView提供了一些通用插槽,比如edit()和setCurrentIndex()。还提供了许多受保护的插槽,包括dataChanged()、rowsInserted()、rowsAboutToBeRemoved()、selectionChanged()和currentChanged()。
根项由rootIndex()返回,当前项由currentIndex()返回。使用scrollTo()确保项目可见。
QAbstractItemView的一些函数与滚动有关,例如setHorizontalScrollMode()和setVerticalScrollMode()。要设置滚动条的范围,你可以重新实现视图的resizeEvent()函数:
void MyView::resizeEvent(QResizeEvent *event) {
horizontalScrollBar()->setRange(0, realWidth - width());
...
}
注意,在显示小部件之前,范围不会更新。
其他几个函数与选择控制有关;例如setSelectionMode()和setSelectionBehavior()。这个类提供了一个可以使用的默认选择模型(selectionModel()),但是可以使用带有QItemSelectionModel实例的setSelectionModel()来替换它。
要完全控制项的显示和编辑,可以使用setItemDelegate()指定一个委托。
QAbstractItemView提供了很多受保护的函数。有些与编辑有关,例如,edit()和commitData(),而其他是键盘和鼠标事件处理程序。
注意:如果您继承QAbstractItemView并打算更新viewport的内容,那么您应该使用viewport->update()而不是update(),因为所有绘制操作都在viewport上进行。
公共类型
enum DragDropMode
描述视图可以操作的各种拖放事件 ,默认情况下,视图不支持拖放(NoDragDrop)。
Constant | Value | Description |
---|---|---|
NoDragDrop | 0 | 不支持拖放。 |
DragOnly | 1 | 视图支持拖动自己的项目 |
DropOnly | 2 | 视图接受drop |
DragDrop | 3 | 视图同时支持拖放 |
InternalMove | 4 | 视图只接受自身的移动(而不是复制)操作。 |
注意,所使用的模型需要提供对拖放操作的支持。
enum DropIndicatorPosition
当前鼠标位置下拉指示器相对于索引的位置
Constant | Value | Description |
---|---|---|
OnItem | 0 | 该项将被拖放到索引。 |
AboveItem | 1 | 该项将被拖放到索引上面。 |
BelowItem | 2 | 项目将被拖放到索引下面。 |
OnViewport | 3 | 该项目将被拖放到没有项目的视窗区域。每个视图处理拖放到视口的项的方式取决于所使用的底层模型的行为。 |
enum EditTrigger
flags EditTriggers
将启动项目编辑的操作
Constant | Value | Description |
---|---|---|
NoEditTriggers | 0 | 编辑不可能的。 |
CurrentChanged | 1 | 当当前项发生变化时开始编辑。 |
DoubleClicked | 2 | 当双击一个项目时,编辑就开始了。 |
SelectedClicked | 4 | 当单击一个已经选择的项目时开始编辑。 |
EditKeyPressed | 8 | 当在一个项目上按下平台编辑键时,编辑就开始了。 |
AnyKeyPressed | 16 | 当按下一个项目上的任何键时,编辑就开始了。 |
AllEditTriggers | 31 | 开始对以上所有操作进行编辑。 |
enum ScrollHint
Constant | Value | Description |
---|---|---|
EnsureVisible | 0 | 滚动以确保项目可见。 |
PositionAtTop | 1 | 滚动以定位项目在视窗的顶部。 |
PositionAtBottom | 2 | 滚动以定位项目在viewport的底部。 |
PositionAtCenter | 3 | 滚动可将项目定位在视口中的中心。 |
enum ScrollMode
滚动条的行为方式
当设置滚动模式为ScrollPerPixel时,单步长将自动调整,除非它是使用setSingleStep()显式设置的。通过将单步长设置为-1,可以恢复自动调节。
Constant | Value | Description |
---|---|---|
ScrollPerItem | 0 | 视图将滚动内容,一次滚动一项。 |
ScrollPerPixel | 1 | 视图将滚动内容,每次滚动一个像素。 |
enum SelectionBehavior
Constant | Value | Description |
---|---|---|
SelectItems | 0 | 单项选择。 |
SelectRows | 1 | 选择行。 |
SelectColumns | 2 | 选择列。 |
enum SelectionMode
视图如何响应用户的选择
Constant | Value | Description |
---|---|---|
SingleSelection | 1 | 当用户选择一个项目时,任何已经选择的项目将变为未选择。当用户单击所选项目时,可以通过按Ctrl键取消选中项目。 |
ContiguousSelection | 4 | 当用户以通常的方式选择一个项目时,选择被清除,新项目被选中。但是,如果用户在单击某个项目时按下Shift键,则会选择或取消当前项目和已单击项目之间的所有项目,具体取决于已单击项目的状态。 |
ExtendedSelection | 3 | 当用户以通常的方式选择一个项目时,选择被清除,新项目被选中。但是,如果用户在单击项目时按下Ctrl键,则所单击的项目将被切换,而其他所有项目将保持不变。如果用户在单击某个项目时按下Shift键,则会选择或取消当前项目和已单击项目之间的所有项目,具体取决于已单击项目的状态。可以通过拖动鼠标在多个项目上进行选择。 |
MultiSelection | 2 | 当用户以通常的方式选择一个项目时,该项目的选择状态是切换的,而其他项目将保持不变。多个项目可以通过拖动鼠标来切换。 |
NoSelection | 0 | 无法选择项目。 |
最常用的模式是单选和扩展选择。
enum State
描述视图的不同状态
这通常只有在重新实现您自己的视图时才有趣。
Constant | Value | Description |
---|---|---|
NoState | 0 | 是默认状态。 |
DraggingState | 1 | 用户正在拖动项目。 |
DragSelectingState | 2 | 用户正在选择项目。 |
EditingState | 3 | 用户正在小部件编辑器中编辑一个项目。 |
ExpandingState | 4 | 用户正在打开项目的一个分支。 |
CollapsingState | 5 | 用户正在关闭项目的一个分支。 |
AnimatingState | 6 | 项目视图正在执行动画。 |
属性
-
alternatingRowColors: bool 是否使用交替颜色绘制背景
项目的背景将使用QPalette::Base和QPalette::AlternateBase绘制;否则背景将使用QPalette::Base color绘制 -
autoScroll: bool 是否启用了拖动移动事件中的自动滚动
如果这个属性被设置为true(默认),如果用户拖拽到视口边缘的16像素范围内,QAbstractItemView会自动滚动视图的内容。如果当前项发生了变化,那么视图将自动滚动以确保当前项完全可见。此属性仅在viewport接受drop时工作。自动滚动通过将此属性设置为false关闭。
-
autoScrollMargin: int 当自动滚动被触发时,此属性保存区域的大小
此属性控制触发自动滚动的视口边缘区域的大小。默认值是16像素。 -
defaultDropAction: Qt::DropAction QAbstractItemView::drag()中默认使用的拖放操作
如果未设置该属性,则当所支持的操作支持复制时,删除操作为复制操作。 -
dragDropMode: DragDropMode 视图将要操作的拖放事件
-
dragDropOverwriteMode: bool 视图的拖放行为
如果它的值为真,所选数据将在删除时覆盖现有的项数据,而移动数据将清除项。如果其值为false,则在所选数据被删除时将作为新项插入。当数据被移动时,项目也被移除。默认值为false,在QListView和QTreeView子类中也是如此。另一方面,在QTableView子类中,属性被设置为true。
注意:这并不是为了防止覆盖项目。模型的flags()实现应该通过不返回Qt::ItemIsDropEnabled来实现。 -
dragEnabled: bool 支持拖动自身项
-
editTriggers: EditTriggers 启动项编辑的操作
此属性是由EditTrigger使用OR操作符组合定义的标志的选择。只有在此属性中设置了执行的操作时,视图才会启动对项的编辑。 -
horizontalScrollMode: ScrollMode 视图如何在水平方向滚动它的内容
此属性控制视图如何水平滚动其内容。可以按像素或按项滚动。它的默认值通过QStyle::SH_ItemView_ScrollMode样式提示来自于样式。 -
iconSize: QSize 保存项目图标的大小
在视图可见时设置此属性将导致条目再次被布局。 -
selectionBehavior: SelectionBehavior 保存视图使用的选择行为
无论选择是根据单个项、行还是列进行的,此属性都保持。 -
selectionMode: SelectionMode 保存视图操作的选择模式
此属性控制用户是否可以选择一个或多个项,以及在多个项选择中,所选项是否必须是一个连续的项范围。 -
showDropIndicator: bool 在拖放项和拖放时是否显示拖放指示器
-
tabKeyNavigation: bool 是否启用了带有选项卡和backtab的项导航。
-
textElideMode: Qt::TextElideMode 此属性在省略文本中保存“…”的位置
所有项目视图的默认值是Qt::ElideRight。 -
verticalScrollMode: ScrollMode 视图如何在垂直方向滚动它的内容
此属性控制视图如何垂直滚动其内容。可以按像素或按项滚动。它的默认值通过QStyle::SH_ItemView_ScrollMode样式提示来自于样式。
公共函数
构造及析构
- QAbstractItemView(QWidget *parent = nullptr)
- virtual ~QAbstractItemView()
属性及选型
- QAbstractItemModel * model() const
- virtual void setModel(QAbstractItemModel *model)
- bool alternatingRowColors() const
- void setAlternatingRowColors(bool enable)
- QSize iconSize() const
- void setIconSize(const QSize &size)
- QWidget * indexWidget(const QModelIndex &index) const
- void setIndexWidget(const QModelIndex &index, QWidget *widget)
- virtual int sizeHintForColumn(int column) const
- virtual int sizeHintForRow(int row) const
- QSize sizeHintForIndex(const QModelIndex &index) const
- virtual void keyboardSearch(const QString &search)
- bool tabKeyNavigation() const
- void setTabKeyNavigation(bool enable)
- Qt::TextElideMode textElideMode() const
- void setTextElideMode(Qt::TextElideMode mode)
滚动
- int autoScrollMargin() const
- void setAutoScrollMargin(int margin)
- bool hasAutoScroll() const
- void setAutoScroll(bool enable)
- QAbstractItemView::ScrollMode horizontalScrollMode() const
- void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode)
- void resetHorizontalScrollMode()
- void resetVerticalScrollMode()
- virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) = 0
- QAbstractItemView::ScrollMode verticalScrollMode() const
- void setVerticalScrollMode(QAbstractItemView::ScrollMode mode)
- virtual QRect visualRect(const QModelIndex &index) const = 0
编辑
- void closePersistentEditor(const QModelIndex &index)
- void openPersistentEditor(const QModelIndex &index)
- bool isPersistentEditorOpen(const QModelIndex &index) const
- QAbstractItemView::EditTriggers editTriggers() const
- void setEditTriggers(QAbstractItemView::EditTriggers triggers)
模型索引
- QModelIndex currentIndex() const
- QModelIndex rootIndex() const
- virtual QModelIndex indexAt(const QPoint &point) const = 0
拖放
- Qt::DropAction defaultDropAction() const
- void setDefaultDropAction(Qt::DropAction dropAction)
- QAbstractItemView::DragDropMode dragDropMode() const
- void setDragDropMode(QAbstractItemView::DragDropMode behavior)
- bool dragDropOverwriteMode() const
- void setDragDropOverwriteMode(bool overwrite)
- bool dragEnabled() const
- void setDragEnabled(bool enable)
- bool showDropIndicator() const
- void setDropIndicatorShown(bool enable)
代理
- QAbstractItemDelegate * itemDelegate() const
- QAbstractItemDelegate * itemDelegate(const QModelIndex &index) const
- void setItemDelegate(QAbstractItemDelegate *delegate)
- QAbstractItemDelegate * itemDelegateForColumn(int column) const
- void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)
- QAbstractItemDelegate * itemDelegateForRow(int row) const
- void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)
选择项
- QAbstractItemView::SelectionBehavior selectionBehavior() const
- void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
- QAbstractItemView::SelectionMode selectionMode() const
- void setSelectionMode(QAbstractItemView::SelectionMode mode)
- QItemSelectionModel * selectionModel() const
- virtual void setSelectionModel(QItemSelectionModel *selectionModel)
重写的公共函数
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override
Reimplements: QWidget::inputMethodQuery(Qt::InputMethodQuery query) const.
公共槽
- void clearSelection()
- void edit(const QModelIndex &index)
- virtual void reset()
- void scrollToBottom()
- void scrollToTop()
- virtual void selectAll()
- void setCurrentIndex(const QModelIndex &index)
- virtual void setRootIndex(const QModelIndex &index)
- void update(const QModelIndex &index)
信号
- void activated(const QModelIndex &index)
- void clicked(const QModelIndex &index)
- void doubleClicked(const QModelIndex &index)
- void entered(const QModelIndex &index)
- void iconSizeChanged(const QSize &size)
- void pressed(const QModelIndex &index)
- void viewportEntered()
受保护的函数
- QPoint dirtyRegionOffset() const
- QAbstractItemView::DropIndicatorPosition dropIndicatorPosition() const
- virtual bool edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event)
- void executeDelayedItemsLayout()
- virtual int horizontalOffset() const = 0
- virtual bool isIndexHidden(const QModelIndex &index) const = 0
- virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) = 0
- void scheduleDelayedItemsLayout()
- void scrollDirtyRegion(int dx, int dy)
- virtual QModelIndexList selectedIndexes() const
- virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *event = nullptr) const
- void setDirtyRegion(const QRegion ®ion)
- virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) = 0
- void setState(QAbstractItemView::State state)
- virtual void startDrag(Qt::DropActions supportedActions)
- QAbstractItemView::State state() const
- virtual int verticalOffset() const = 0
- virtual QStyleOptionViewItem viewOptions() const
- virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0
重写的受保护的函数
- virtual void dragEnterEvent(QDragEnterEvent *event) override
- virtual void dragLeaveEvent(QDragLeaveEvent *event) override
- virtual void dragMoveEvent(QDragMoveEvent *event) override
- virtual void dropEvent(QDropEvent *event) override
- virtual bool event(QEvent *event) override
- virtual bool eventFilter(QObject *object, QEvent *event) override
- virtual void focusInEvent(QFocusEvent *event) override
- virtual bool focusNextPrevChild(bool next) override
- virtual void focusOutEvent(QFocusEvent *event) override
- virtual void inputMethodEvent(QInputMethodEvent *event) override
- virtual void keyPressEvent(QKeyEvent *event) override
- virtual void mouseDoubleClickEvent(QMouseEvent *event) override
- virtual void mouseMoveEvent(QMouseEvent *event) override
- virtual void mousePressEvent(QMouseEvent *event) override
- virtual void mouseReleaseEvent(QMouseEvent *event) override
- virtual void resizeEvent(QResizeEvent *event) override
- virtual void timerEvent(QTimerEvent *event) override
- virtual bool viewportEvent(QEvent *event) override
- virtual QSize viewportSizeHint() const override
受保护的槽
- virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)
- virtual void commitData(QWidget *editor)
- virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
- virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int> &roles = QVector< int>())
- virtual void editorDestroyed(QObject *editor)
- virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
- virtual void rowsInserted(const QModelIndex &parent, int start, int end)
- virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
- virtual void updateGeometries()
参见
- 视图类
- 模型/视图编程
- QAbstractItemModel
- 图表示例。