PyQt5的抽象视图基类QAbstractItemView
一、QAbstractItemView的基本概念
QAbstractItemView 类继承自 QAbstractScrollArea,后者又继承自 QFrame,该类是 Qt 所有视图类的基类, Qt 的所有视图都需要子类化该类。注意:该类是抽象类,因此不能创建该类的对象。
该类的构造函数原型为: QAbstractItemView(QWidget* parent = Q_NULLPTR);
QAbstractItemView类支持以下的键盘操作:
QAbstractItemView类的当前项目或当前索引:
- 当前项目用于键盘导航和焦点指示(原理见下图),若按下编辑键 F2,将会编辑当前项目
- 当前项目不一定是当前已被选择(高亮)的项目, 当前项目可以处于被选择状态,也可以不处于被选择状态。
- 只能有一个当前项目,但可以同时有多个被选择的项目。
- 当前项目通常是具有焦点的项目。
本小节暂时不介绍怎样实现自定义的视图,因为自定义视图需要自行绘制(通常在paintEvent()函数内完成),所以需在讲解委托之后讲解怎样自定义视图。
二、QAbstractItemView类中的属性
2.1 与滚动有关的属性
-
autoScroll: bool
访问函数:
bool hasAutoScroll() const;
void setAutoScroll(bool);
是否启用自动滚动,默认为 tru(启用) -
alternatingRowColors: bool
访问函数:
bool alternatingRowColors() const;
void setAlternatingRowColors(bool);
是否使用交替的颜色绘制背景色,若为 true,则使用 QPalette::AlternateBase 和
QPalette::Base 绘制背景色,否则使用 QPalette::Base 绘制背景色。默认为 false。 -
autoScrollMargin: int
访问函数:
int autoScrollMargin() const;
void setAutoScrollMargin(int);
描述触发自动滚动时视口边缘区域的大小, 当用户拖动至该区域时视图将自动滚动, 默认
为 16 像素。原理见下图
-
horizontalScrollMode: ScrollMode
访问函数:
ScrollMode horizontalScrollMode() const;
void setHorizontalScrollMode(ScrollMode);
void resetHorizontalScrollMode(); -
verticalScrollMode: ScrollMode
访问函数:
ScrollMode verticalScrollMode() const;
void setVerticalScrollMode(ScrollMode );
void resetVerticalScrollMode();
以上属性分别表示视图在水平或垂直方向上的滚动模式,即一次滚动一个像素还是一个项目的内容,默认值由 QStyle::SH_ItemView_ScrollMode 决定。 ScrollMode 枚举取值如下:
2.2 与拖放有关的属性
-
dragEnabled: bool
访问函数:
bool dragEnabled() const;
void setDragEnabled(bool);
是否启用拖放操作,注意,视图默认未启用拖放。 -
defaultDropAction: Qt::DropAction
访问函数:
Qt::DropAction defaultDropAction() const;
void setDropAction(Qt::DropAction);
此属性描述拖放时的默认放置动作(见属性 showDropIndicator 的图示)。若未设置该属性,则当支持的放置动作支持 Qt::CopyAction 时,放置操作为 Qt::CopyAction。 枚举Qt::DropAction 见 QAbstractItemModel::supportedDropActions()函数。 -
showDropIndicator: bool
访问函数:
bool showDropIndicator() const;
void setDropIndicatorShow(bool);
拖动项目在项目放下时,是否向用户显示放置指示符(通常该位置会以不同的形式显示,比如以阴影形式显示等,见下图)
-
dragDropMode: DragDropMode
访问函数:
DragDropMode dragDropMode()
void setDragDropMode(DragDropMode);
描述视图支持的拖放模式。 DragDropMode 枚举见下表
-
dragDropOverwriteMode: bool
访问函数:
bool dragDropOverwriteMode() const;
void setDragDropOverwriteMode(bool);
描述施放操作放置时的覆盖行为,若该值为 true,则选定的数据将在放置时覆盖现在的数据,若为 false,则在放置数据时,所选数据将作为新项目被插入。对于 QListView 和QTreeView 默认为 false,对于 QTableView 默认为 true。 该属性对不同视图的行为并不一致。
2.3 编辑项目
- editTriggers&