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;</

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

537

被折叠的 条评论
为什么被折叠?



