【Qt之模型视图】4. 委托及自定义委托

本文介绍了如何在Qt中使用自定义委托,如QSpinBox,管理和编辑模型数据。通过继承QStyledItemDelegate,开发者可以创建可定制的编辑工具,并通过事件过滤器或自定义控件实现更友好的交互。

1. 前言

与MVC架构(模型-视图-控制器模式)不同,模型/视图结构中不包括一个完全独立的组件来管理与用户的交互。通常,视图负责将模型数据呈现给用户,并处理用户输入。为了在获取输入的方式上提供一些灵活性,交互由委托完成。这些组件提供输入功能,并负责渲染某些视图中的单个项。控制委托的标准接口在QAbstractItemDelegate类中定义。
委托应能够通过实现paint()和sizeHint()函数自行渲染其内容。但是,简单基于小部件的委托可以将QItemDelegate作为QAbstractItemDelegate的子类,并利用这些函数的默认实现。
委托的编辑器可以通过使用小部件来管理编辑过程,或直接处理事件来实现。
Qt提供的标准视图使用QItemDelegate的实例提供编辑功能。默认委托接口的实现为标准视图(QListView、QTableView和QTreeView)中的每个项呈现常规样式。
默认委托处理了所有标准角色。
视图使用的委托由itemDelegate()函数返回。setItemDelegate()函数允许为标准视图安装自定义委托,在设置自定义视图的委托时需要使用此函数。

2. 自定义委托

接下来,使用自定义委托QSpinBox来提供编辑工具,主要用于显示整数的模型。
先设置一个自定义的基于整数的表模型QStandardItemModel,因为自定义委托控制数据输入。之后创建一个表视图来显示模型的内容,使用自定义委托进行编辑。
可以继承QStyledItemDelegate来实现自定义委托。
创建自定义委托需要实现

    // 创建自定义Widget
    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const Q_DECL_OVERRIDE;
    // 设置数据到控件
    void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
    // 设置数据到模型
    void setModelData(QWidget *editor,
                      QAbstractItemModel *model,
                      const QModelIndex &index) const Q_DECL_OVERRIDE;</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FreeLikeTheWind.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值