23. [Python GUI] PyQt5中的模型与视图框架-抽象视图基类QAbstractItemView

本文详细介绍了PyQt5中的QAbstractItemView抽象视图基类,包括其基本概念、关键属性、功能函数、常用信号和常用地函数。涵盖了滚动、拖放、编辑、选择、委托等核心操作,适合理解和定制自定义视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQt5的抽象视图基类QAbstractItemView

一、QAbstractItemView的基本概念

QAbstractItemView 类继承自 QAbstractScrollArea,后者又继承自 QFrame,该类是 Qt 所有视图类的基类, Qt 的所有视图都需要子类化该类。注意:该类是抽象类,因此不能创建该类的对象。

该类的构造函数原型为: QAbstractItemView(QWidget* parent = Q_NULLPTR);

QAbstractItemView类支持以下的键盘操作:

20221126165619

QAbstractItemView类的当前项目或当前索引:

  • 当前项目用于键盘导航和焦点指示(原理见下图),若按下编辑键 F2,将会编辑当前项目
  • 当前项目不一定是当前已被选择(高亮)的项目, 当前项目可以处于被选择状态,也可以不处于被选择状态。
  • 只能有一个当前项目,但可以同时有多个被选择的项目。
  • 当前项目通常是具有焦点的项目。

20221126165825

本小节暂时不介绍怎样实现自定义的视图,因为自定义视图需要自行绘制(通常在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 像素。原理见下图
    20221126170253

  • 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 枚举取值如下:
    20221126170448

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);
    拖动项目在项目放下时,是否向用户显示放置指示符(通常该位置会以不同的形式显示,比如以阴影形式显示等,见下图)
    20221126170647

  • dragDropMode: DragDropMode
    访问函数:
    DragDropMode dragDropMode()
    void setDragDropMode(DragDropMode);
    描述视图支持的拖放模式。 DragDropMode 枚举见下表
    20221126170726

  • dragDropOverwriteMode: bool
    访问函数:
    bool dragDropOverwriteMode() const;
    void setDragDropOverwriteMode(bool);
    描述施放操作放置时的覆盖行为,若该值为 true,则选定的数据将在放置时覆盖现在的数据,若为 false,则在放置数据时,所选数据将作为新项目被插入。对于 QListView 和QTreeView 默认为 false,对于 QTableView 默认为 true。 该属性对不同视图的行为并不一致。

2.3 编辑项目

  • editTriggers&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值