Qt之QStyledItemDelegate类的派生用法(二)

本文详细介绍了Qt中如何派生QStyledItemDelegate类并实现SpinBoxDelegate,用于限制表格视图中编辑器的值在0到100之间。通过重载关键函数如createEditor、setModelData和updateEditorGeometry,实现自定义编辑器的行为,确保数据输入的合法性。示例代码包括Main函数、完整源文件等。
摘要由CSDN通过智能技术生成

实例界面

在这里插入图片描述
之前介绍过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)</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值