代理作用:在界面发生编辑时可以指定编辑所用的组件,可以沟通Model和View



自定义代理需要继承的基类和需要实现的方法



使用步骤:

  1. 继承QStyledItemDelegate,实现上面的四个方法
  2. 在页面上声明一个继承后类的对象
  3. 类似代码 ui->tableView->setItemDelegateForColumn(0, intSpinDelegate);为某行、某列、某个单元格设置

例子:本例子中只展示修改的内容,其他代码同上节标准模型代码

QIntDelegate.h

#ifndef QINTDELEGATE_H
#define QINTDELEGATE_H #include <QObject>
#include <QStyledItemDelegate> class QIntDelegate : public QStyledItemDelegate
{
public:
QIntDelegate();
QIntDelegate(QWidget *parent = nullptr); // QAbstractItemDelegate interface
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;//生成一个editor
void setEditorData(QWidget *editor, const QModelIndex &index) const override;//设置editor数据,供编辑
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;//设置model数据,View数据写回model
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;//设置editor的尺寸
}; #endif // QINTDELEGATE_H

QIntDelegate.cpp

#include "QIntDelegate.h"

#include <QSpinBox>

QIntDelegate::QIntDelegate()
{ } QIntDelegate::QIntDelegate(QWidget *parent)
{
this->setParent(parent);
} QWidget *QIntDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const//生成一个editor
{
QSpinBox *editorSpin = new QSpinBox(parent);
editorSpin->setMinimum(0);
editorSpin->setFrame(false);//设置边框
return editorSpin;
} void QIntDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const//设置editor数据,供编辑
{
int data = index.model()->data(index, Qt::EditRole).toInt();//从index反向拿到model,然后拿到数据
QSpinBox *spinBox = qobject_cast<QSpinBox *>(editor);
spinBox->setValue(data);
} void QIntDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const//设置model数据,View数据写回model
{
QSpinBox *spinBox = qobject_cast<QSpinBox *>(editor);
spinBox->interpretText();//可以保证拿到的是最新的值 int val = spinBox->value();
model->setData(index, val, Qt::EditRole);
} void QIntDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const//设置editor的尺寸
{
editor->setGeometry(option.rect);
}

mainwindow中添加的内容

    /**==================== 自定义代理新增内容 =========================**/
QIntDelegate *intSpinDelegate = new QIntDelegate(this);
QQualityComboboxDelegate *qualityEditor = new QQualityComboboxDelegate();
    /**==================== 自定义代理新增内容 =========================**/
ui->tableView->setItemDelegateForColumn(0, intSpinDelegate);
ui->tableView->setItemDelegateForColumn(4, qualityEditor);

QT5笔记: 22. 自定义代理的更多相关文章

  1. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...

  2. 客户端使用自定义代理类访问WCF服务 z

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...

  3. Scarpy 起始url 自定义代理 自定义去重规则

    - start_urls - 内部原理 """ scrapy引擎来爬虫中去起始的URL: 1. 调用start_requests并获取返回值 2. v = iter(返回 ...

  4. 客户端使用自定义代理类访问WCF服务

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简 ...

  5. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  6. [转载]SharePoint 2013搜索学习笔记之自定义结果源

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  7. 【设计模式】学习笔记17:代理模式之保护代理与Java反射

    本文出自   http://blog.csdn.net/shuangde800 本笔记内容: 1. Java动态代理,反射机制 2. 保护代理 3. 应用保护代理实现的约会系统 ----------- ...

  8. nginx 自定义代理返回 404

    在nginx的http段,加上一面的配置 proxy_intercept_errors on;//自定义代理返回的404错误提示

  9. Hadoop学习笔记—5.自定义类型处理手机上网日志

    转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...

  10. SQL反模式学习笔记22 伪键洁癖,整理数据

    目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...

随机推荐

  1. Javascript之常用尺寸、位置获取

    标签: js 缘起 平时在开发中或多或少需要去获取元素尺寸,特此记录常用的尺寸获取方案. 常用相关尺寸 窗口可视尺寸 测试地址 /** * 获取窗口可视尺寸 */ function getWindow ...

  2. Python 证件照换底色

    # -*- coding: utf-8 -*- ''' @Time : 2021/4/12 19:06 @Author : 水一RAR ''' import numpy as np import cv ...

  3. 金Gien乐道 | 10月热点回顾

    ​ 收获之秋,中电金信Q4开篇捷报不断 ​ Q4开篇,中电金信迎来多个捷报.公司与青岛财通集团联合打造的核心业务系统(一体化业务平台)一期项目顺利投产上线并平稳运行:中标华南某全国性股份制商业银行新一 ...

  4. 聊一聊 C#后台线程 如何阻塞程序退出

    一:背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题:后台线程的内部是如何运转的 ? ,犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程 ...

  5. UdpClient.BeginReceive(AsyncCallback, Object) 方法

    命名空间: System.Net.Sockets 程序集: System.Net.Sockets.dll 从远程主机异步接收数据报. public IAsyncResult BeginReceive ...

  6. 移动端IM开发者必读(三):爱奇艺移动端跨国弱网通信的优化实践

    本文由爱奇艺技术团队分享,作者isno,原题"爱奇艺海外App的网络优化实践",下文进行了排版和内容优化等. 1.引言 做海外市场,特别目标是面向全球的用户,网络的重要性不言而喻. ...

  7. Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目

    推荐一个轻量级的任务调度开源项目. 01 项目简介 Coravel是一个.NET开源任务调度库,只需简单代码.几乎零配置就可以实现多种功能柜,如任务调度.队列.缓存.事件广播和邮件发送等.该项目特点就 ...

  8. w3cschool-HBase官方文档-2数据模型

    HBase数据模型 2018-03-03 15:20 更新 HBase数据模型 在 HBase 中,数据模型同样是由表组成的,各个表中又包含数据行和列,在这些表中存储了 HBase 数据.在本节中,我 ...

  9. w3cschool-微信小程序开发文档-框架

    https://www.w3cschool.cn/weixinapp/1g7f1q8l.html MINA文件结构 文件结构 MINA程序包含一个描述整体程序的app和多个描述各自页面的page. 一 ...

  10. Superset用户集成方案2

    superset 认证分析 superset基于flask-appbuilder开发,security基于flask_appbuilder.security,翻阅其代码, 找到入口: superset ...