实例界面
之前介绍过QSqlRelationalDelegate类的派生,分别重载了下面四个虚函数
QWidget *QSqlRelationalDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
今天将增加另外三个委托类的函数重载
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
SpinBoxDelegate示例展示了如何通过重用标准的Qt编辑器小部件来为模型/视图框架中的自定义委托创建编辑器
模型/视图框架提供了一个标准委托,默认情况下,该委托与标准视图类一起使用。对于大多数目的来说,通过这个委托可以选择的编辑器小部件足以编辑文本、布尔值和其他简单的数据类型。但是,对于特定的数据类型,有时需要使用自定义委托以特定的方式显示数据,或者允许用户使用自定义控件编辑数据。
SpinBoxDelegate委托类定义
委托的定义如下:
class SpinBoxDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
SpinBoxDelegate(QObject *parent = nullptr);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
};
委托类只声明创建编辑器小部件并在视图中的正确位置显示它以及与模型通信所需的那些函数。自定义委托还可以通过重新实现paintEvent()函数来提供自己的绘画代码。此外,还可以通过重新实现destroyEditor() 函数来重用(并避免删除)编辑器小部件。重用的小部件可以是在构造函数中创建并在析构函数中删除的可变成员
SpinBoxDelegate类实现
构造函数以QObject作为参数调用基类的构造函数:
SpinBoxDelegate::SpinBoxDelegate(QObject *parent)</