QStyledItemDelegate自定义代理组件

2023-12-29 22:18

本文主要是介绍QStyledItemDelegate自定义代理组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、继承QStyledItemDelegate自定义类组件

2、重写函数

3、通过在QTableView中插入自定义代理组件为例

继承QStyledItemDelegate写的头文件

#ifndef CUSTOMPUSHBOTTONDELEGATE_H
#define CUSTOMPUSHBOTTONDELEGATE_H#include <QObject>
#include <QStyledItemDelegate>
#include <QPushButton>
class CustomPushBottonDelegate : public QStyledItemDelegate
{Q_OBJECTpublic:CustomPushBottonDelegate();~CustomPushBottonDelegate();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;private:};#endif // CUSTOMPUSHBOTTONDELEGATE_H

函数实现

#include "customspinboxdelegate.h"CustomSpinBoxDelegate::CustomSpinBoxDelegate()
{
}CustomSpinBoxDelegate::~CustomSpinBoxDelegate()
{}//创建代理编辑组件
QWidget* CustomSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{QSpinBox* editor = new QSpinBox(parent);editor->setFrame(false);editor->setMinimum(0);editor->setMaximum(100000);return editor;
}//从数据模型获取数据,显示到代理组件中
void CustomSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{int value = index.model()->data(index, Qt::EditRole).toInt();QSpinBox* spinBox = static_cast<QSpinBox*>(editor);spinBox->setValue(value);
}//将代理组件的数据保存到数据模型中
void CustomSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{QSpinBox* spinBox = static_cast<QSpinBox*>(editor);spinBox->interpretText();int value = spinBox->value();model->setData(index, value, Qt::EditRole);
}//设置组件大小
void CustomSpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{editor->setGeometry(option.rect);
}

main中过程

头文件

#ifndef QVARIANTCUSTOM_H
#define QVARIANTCUSTOM_H#include <QtWidgets/QWidget>
#include "ui_qvariantcustom.h"
#include <QDebug>
#include "customspinboxdelegate.h"
#include <QStandardItemModel>
#include "customcomboboxdelegate.h"
#include "custompushbottondelegate.h"class QVariantCustom : public QWidget
{Q_OBJECTpublic:QVariantCustom(QWidget *parent = 0);~QVariantCustom();QStandardItemModel* pModel = nullptr;
private:Ui::QVariantCustomClass ui;CustomSpinBoxDelegate spinBoxDelegate;CustomComboBoxDelegate comboBoxDelegate;CustomPushBottonDelegate pushButtonDelegate;
};#endif // QVARIANTCUSTOM_H

主函数

#include "qvariantcustom.h"QVariantCustom::QVariantCustom(QWidget *parent): QWidget(parent)
{ui.setupUi(this);pModel = new QStandardItemModel(2, 3, this);ui.tableView->setModel(pModel);ui.tableView->setItemDelegateForColumn(0, &spinBoxDelegate);/*ui.tableView->setItemDelegateForColumn(1, &comboBoxDelegate);ui.tableView->setItemDelegateForColumn(2, &pushButtonDelegate);*/
}QVariantCustom::~QVariantCustom()
{}

 

这篇关于QStyledItemDelegate自定义代理组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550897

相关文章

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

kafka自定义分区器使用详解

《kafka自定义分区器使用详解》本文介绍了如何根据企业需求自定义Kafka分区器,只需实现Partitioner接口并重写partition()方法,示例中,包含cuihaida的数据发送到0号分区... 目录kafka自定义分区器假设现在有一个需求使用分区器的方法总结kafka自定义分区器根据企业需求

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息