自定义委托类

news2024/11/25 20:28:25

setItemDelegete();该函数可以自定义委托类

该例子为Qt官网的一个例子:使用QSpinBox来提供编辑功能

  1. 首先创建一个项目:名为object
  2. 在项目中添加一个c++类,类名为SpinBoxDelegate

修改该类的基类:更改为QImageDelegate,然后需要添加重写一些函数

SpinBoxDelegate.h文件:

#ifndef SPINBOXDELEGATE_H
#define SPINBOXDELEGATE_H

#include<QItemDelegate>
class SpinBoxDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    explicit SpinBoxDelegate(QObject *parent = nullptr);
    //创建编辑器
    QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                           const QModelIndex &index) const ;
    //设置编辑器数据
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    //设置模型数据
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    //设置显示的几何图形
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
signals:

};

#endif // SPINBOXDELEGATE_H

以下为这4个函数的使用:在SpinBoxDelegate.cpp中添加以下函数

1.提供编辑器(createEditor)

添加委托时需要在该函数中指定控件

请注意,我们不需要保留指向编辑器小部件的指针,因为视图负责在不再需要它时销毁它

QWidget * SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                       const QModelIndex &index) const 
{
    QSpinBox *spin=new QSpinBox(parent);//创建一个SpinBOx控件
    spin->setMinimum(0);//设置最小值
    spin->setMaximum(100);//设置最大值
    return spin;//返回该控件
}

2.设置编辑器的数据

委托必须提供一个函数来将模型数据复制到编辑器中。在此示例中,我们读取存储在显示角色中的数据,并相应地设置数字显示框中的值

void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    int number=index.model()->data(index,Qt::EditRole).toInt();//获取数值,并转化格式
    QSpinBox *spinbox=static_cast<QSpinBox*>(editor);//强制转换
    spinbox->setValue(number);//设置数值 
}

 3.设置模型数据

标准 QStyledItemDelegete 类在完成编辑时通过发出 closeEditor() 信号来通知视图。该视图可确保关闭并销毁编辑器微件。在此示例中,我们仅提供简单的编辑工具,因此我们不需要发出此信号。

void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QSpinBox *spinbox=static_cast<QSpinBox*>(editor);
    spinbox->interpretText();//获取QSpinBOx中最新的数值
    int number=spinbox->value();//获取数值
    model->setData(index,number,Qt::EditRole);//设置模型数据
}

4.更新编辑器的几何模型

委托负责管理编辑器的几何图形。创建编辑器时,以及更改项目在视图中的大小或位置时,必须设置几何图形。幸运的是,视图在视图选项对象内提供了所有必要的几何信息。

void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);//设置项目矩形  
}

使用该控件:

在main.cpp中添加以下头文件:

#include<QAbstractItemModel>
#include<QStringListModel>
#include<QTableView>
#include"spinboxdelegate.h"

并在函数中添加以下代码:

int main(){
    QApplication a(argc, argv);   
    QStringList list;//数据列表
    list<<"1"<<"2"<<"3";//添加3个数据
    QAbstractItemModel *Mode=new QStringListModel(list);//创建一个模型
    QTableView *table=new QTableView;
    SpinBoxDelegate *delegate=new SpinBoxDelegate;
    table->setItemDelegate(delegate);//设置委托
    table->setModel(Mode);//设置模型
    table->show();
    return a.exec();
}

运行效果为:

你修改数据时,使用QSpinBOx

 官方链接为:

模型/视图编程|Qt小部件 5.15.11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12/15历史上的今天

宜找代驾 星期四 农历十一月廿二 今夜无人拥你入怀不如喝完杯中酒走入夜色中踏上回家的归途 *约翰-梅尔西藏墨脱公路嘎隆拉隧道顺利贯通 2010年12月15日&#xff0c;西藏墨脱公路控制性工程——嘎隆拉隧道顺利贯通。   2010年12月15日西藏墨脱公路控制性工程——嘎隆拉隧道…

华为开源自研AI框架昇思MindSpore应用实践:RNN实现情感分类

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据准备1.数据下载模块2.加载IMDB数据集2.加载预训练词向量三、数据集预处理四、模型构建1.Embedding2.RNN(循环神经网络)3.Dense4.损失函数与优化器5.训练逻辑6.评估指标和逻辑五、模型训练与保存六、模…

电脑重装系统后卡顿怎么办?教你快速解决电脑卡顿问题

​Win10电脑卡顿怎么办&#xff1f;许多用户在使用电脑的过程中发现&#xff0c;随着使用时间的增加&#xff0c;电脑会越来越卡顿。有些小伙伴就会选择重装电脑系统&#xff0c;那么我们在重装电脑之后要进行什么操作才能让电脑不卡顿呢&#xff1f; 操作方法&#xff1a; 优化…

java学生成绩管理系统源码swing(GUI) MySQL带开发教程永久学习

今天给大家演示一款由Java swing即GUI和mysql数据库实现的&#xff0c;学生成绩管理系统&#xff0c;系统采用了MVC的设计模式&#xff0c;结构层次非常清晰&#xff0c;此外&#xff0c;该项目有手把手的开发教程&#xff0c;适合刚入门Java的学生学习&#xff0c;下面我们来看…

Pr:导出设置

◆ ◆ ◆导出设置&#xff08;媒体文件&#xff09;Export Settings&#xff08;Media File&#xff09;基本设置文件名File Name指定导出的文件名。位置Location可以点击蓝色字更改导出的文件的存放位置。预设Preset选择导出预设。匹配源 Match Source预设会将大多数设置与源…

[附源码]Python计算机毕业设计高校贫困生信息管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Mysql 查询获取 为数字的 字符串

先看示例数据: test_value 字段 为 VARVCHAR 类型 数据样例&#xff1a; 包含 纯数字&#xff0c; 带小数点的数字&#xff0c; 字符串 获取里面的纯数字 &#xff1a;使用正则匹配 函数 REGEXP &#xff0c;返回 1代表不匹配&#xff0c; 返回 0 代表匹配 包含小数点 [^0-…

两步开启研发团队专属ChatOps|极狐GitLab ChatOps 的设计与实践

本文来自&#xff1a; 彭亮 极狐(GitLab) 高级产品经理 郭旭东 极狐(GitLab) 资深创新架构师 舒文斌 极狐(GitLab) 高级网站可靠性工程师 最近几天&#xff0c;ChatGPT 真是杀疯了 &#xff01; 相信大家的朋友圈&#xff0c;已经被调戏、询问或探讨 ChatGPT 的贴子刷屏。 看到…

虹科案例 | 风电机组的预测性维护应该如何进行?

虹科预测性维护方案 在风能领域的应用 虹科案例 01 应用背景 风能是最重要的清洁能源之一&#xff0c;大力发展风电等清洁能源是实现国家可持续发展战略的必然选择。发展风电、光伏等新能源的高效运维技术已成为当前电力系统面临的重要问题之一。在风电机组单机容量较大、机组…

在Azure上设置存储账户

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 搜索存储账户类型资源 2. 开始创建新存储账户 &#xff08;1&#xff09;基本信息 &#xff08;2&#xff09;高级选项 &#xff08;3&#xff09;网络配置 &#xff08;4&#xff09;数据保护…

怎么看电脑是32位还是64位?2个方法,快速查看

熟悉计算机操作系统的朋友应该知道&#xff0c;电脑系统分为32位和64位。不同系统位数的兼容软件也会有所不同。怎么看电脑是32位还是64位&#xff1f;这里小编分享2个方法&#xff0c;快速查看自己的电脑系统位数。 方法一&#xff1a;电脑属性查看法 很多小伙伴不知道怎么看…

特殊符号——双引号和单引号

特殊符号——双引号和单引号一.通常理解二.一般使用三.特殊使用四.为何计算机需要字符一.通常理解 在c语言中&#xff0c;我们通常认为双引号保存的是字符串&#xff0c;单引号里保存的是字符。这里也没什么好说的&#xff0c;说一说它们的细微的一些地方 二.一般使用 接下来我…

图为科技与深圳人工智能产业协会联合发布边缘计算机概念

2022年12月13日由图为信息科技&#xff08;深圳&#xff09;有限公司联合深圳市人工智能产业协会举办的“边缘计算机发布会”在深圳市龙岗区大运AI小镇举行。 随着5&#xff27;、物联网、人工智能等技术的规模应用和持续进步&#xff0c;边缘计算市场进入蓬勃发展期。我国在《…

罗克韦尔(AB)PLC远程维护连接不上网关怎么办?

对很多使用罗克韦尔&#xff08;AB&#xff09;PLC的工厂来说&#xff0c;PLC具备成熟系统和稳定性能等特点&#xff0c;可以适应厂内设备的控制指令&#xff0c;需要细心保养&#xff0c;认真维护。随着无线通信技术和物联网技术的发展&#xff0c;PLC的数据上云进行云端监控和…

过两年 JVM 可能就要被它替代了

今天说一说 GraalVM。 GraalVM 是 Oracle 大力发展和想要推广的新一代 JVM &#xff0c;目前很多框架都已经渐渐支持 GraalVM 了&#xff0c;比如我们在用的 Spring 也已经推出了对 GraalVM 兼容的工具包了。 既然说的这么厉害&#xff0c;那么它到底是何方神圣呢。 GraalVM…

java零基础入门-Scanner类

目录 1.概念 2.常用api 3.next()方法 4.nextLine()方法 5.next()与nextLine()区别 6.实例 1.概念 针对java5版本诞生&#xff0c;在jdk之前版本这次的版本是添加了java.util.Scanner类&#xff1b;其类是一个用于扫描输入文本的工具集。它不仅提供了可结合正则表达式和从输…

基于云原生的集群自愈系统 Flink Cluster Inspector

作者: 舟柒、楼台 1. 业务背景与挑战 1.1 实时计算集群现状 关于热点机器处理一直是阿里云 Flink 集群运维的一大痛点&#xff0c;不管在日常还是大促都已经是比较严重的问题&#xff0c;同时这也是分布式系统的老大难问题。而在今年整个阿里云成本控制的背景下&#xff0c;…

Flink 1.16:Hive SQL 如何平迁到 Flink SQL

摘要&#xff1a;本文整理自 Apache Flink PMC&Committer 伍翀&#xff08;云邪&#xff09;在 9 月 24 日 Apache Flink Meetup 的演讲。主要内容包括&#xff1a;Hive SQL 迁移的动机Hive SQL 迁移的挑战Hive SQL 迁移的实践Hive SQL 迁移的演示未来规划Tips&#xff1a;…

班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【数据库数据恢复】SQL server数据库被加密怎么恢复数据?

SQL server数据库故障&#xff1a; SQL server数据库和备份文件被加密&#xff0c;无法使用。数据库MDF、LDF、log日志文件名字被修改。 SQL server数据库数据恢复过程&#xff1a; 1、首先对故障数据库所涉及到的硬盘进行镜像备份&#xff0c;避免对原始数据造成二次破坏&…