Qt 表格QTableWidget

表格是Qt最重量级的控件之一,另外一个重量级控件就是树。QTableWidget是成熟的表格控件,它有默认的模型QTableModel(继承自QAbstractTableModel),QTableWidget本身继承自QTableView。

本文通过多个示例展示QTableWidget表格的丰富的使用方法。

表格中动态创建下拉框等自定义控件

以下是一个示例,通过实现一个QStyledItemDelegate的子类,来提供自定义的表格代理控件,然后在表格中设置该代理。

最终实现的效果就是双击表格第一列的单元格都会在单元格内创建下拉框编辑控件,并且在交互完成后控件内的值会同步到表格中。

如果要实现表格的不同列的编辑控件不一样,比如有的通过下拉框编辑,有的通过拨轮编辑,就可以通过在ItemDelegate的createEditor方法中去创建这些不同的控件。

#ifndef ITEMDELEGATE_H
#define ITEMDELEGATE_H#include <QStyledItemDelegate>class ItemDelegate : public QStyledItemDelegate
{Q_OBJECT
public:explicit ItemDelegate(QObject *parent = nullptr);// QAbstractItemDelegate interface
public: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;
};#endif // ITEMDELEGATE_H
#include "itemdelegate.h"
#include <QtWidgets>ItemDelegate::ItemDelegate(QObject *parent): QStyledItemDelegate{parent}
{}QWidget *ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.column()==0){//当双击表格第1列的单元格时,会创建下拉框QComboBox* cbx=new QComboBox(parent);cbx->addItems({"100","200"});return cbx;}return QStyledItemDelegate::createEditor(parent,option,index);}void ItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{if(index.column()==0){//将单元格的值写入到代理控件中QComboBox* cbx=qobject_cast<QComboBox*>(editor);if(cbx!=nullptr){QString value=index.model()->data(index,Qt::EditRole).toString();cbx->setCurrentText(value);}}elseQStyledItemDelegate::setEditorData(editor,index);
}void ItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{if(index.column()==0){QComboBox* cbx=qobject_cast<QComboBox*>(editor);if(cbx!=nullptr){model->setData(index,cbx->currentText(),Qt::EditRole);}}elseQStyledItemDelegate::setModelData(editor,model,index);
}
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->resize(800,600);QTableWidget* tb=new QTableWidget;tb->setRowCount(3);tb->setColumnCount(5);tb->setItemDelegate(new ItemDelegate);this->setCentralWidget(tb);
}

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

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

相关文章

C#中只能在.NetFramework下使用LINQtoSQL不要在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点&#xff0c;因为我百般努力在.net7.0下无法实现LINQtoSQL的…

RAR Extractor v11.20(mac解压缩软件)

RAR Extractor是一款专门用于解压RAR格式压缩文件的软件&#xff0c;以下是关于RAR Extractor的详细介绍&#xff1a; 强大的解压功能&#xff1a;RAR Extractor能够解压RAR格式的压缩文件&#xff0c;无论是单一的RAR文件还是RAR文件包&#xff0c;都可以通过RAR Extractor进…

uniapp小程序刮刮乐抽奖

使用canvas画布画出刮刮乐要被刮的图片&#xff0c;使用移动清除画布。 当前代码封装为刮刮乐的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg" :src&q…

多模块项目的搭建以及Nacos服务的发现与调用

这里写目录标题 多模块项目的搭建父项目的构建子模块的创建父子模块的意义 将注册服务引入到父子模块中创建子模块用于发现服务和调用供调用的服务接口创建调用子模块 测试一些小问题 在前文中我们实现了微服务的注册参考此文&#xff1a; Spring Cloud Alibaba中Nacos的安装&a…

基于RK3568的新能源储能能量管理系统ems

新能源储能能量管理系统&#xff08;EMS&#xff09;是一种基于现代化技术的系统&#xff0c;旨在管理并优化新能源储能设备的能量使用。 该系统通过监测、调度和控制新能源储能设备来确保能源的高效利用和可持续发展。 本文将从不同的角度介绍新能源储能能量管理系统的原理、…

文字的力量

不知道以前的时代的年轻人有没有这样的感受。现在我觉得自己是不是出现了认知偏差&#xff0c;发现在很多描写现在的二十几岁年轻人的成长经历的文字下面都会出现很多共鸣&#xff0c;包括我自己也有&#xff0c;就让我有一个错觉:是不是中国所有的和我同龄的年轻人都是这样过来…

what?腾讯云3年轻量2核4G5M服务器566.6元哪去了?

what&#xff1f;腾讯云3年轻量2核4G5M服务器566.6元哪去了&#xff1f;腾讯云双11优惠活动3年轻量2核4G5M服务器从566.6元涨价到756元三年&#xff0c;3年轻量2核2G4M服务器从366.6元恢复到540元三年&#xff0c;大家抓紧吧&#xff0c;三年轻量已经库存已经不多了&#xff0c…

RHCSA --- 第二天

一、查看IP地址 [rootlocalhost ~] ip ad 对应四张网卡 第一张&#xff1a;环回网卡&#xff08;用于测试&#xff09; 第二张&#xff08;主要&#xff09;&#xff1a;以太网网卡&#xff08;ens160&#xff09; 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>…

shell之netstat的用法

shell之netstat的用法 所有参数应用举例 所有参数 1&#xff09;-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。 2&#xff09;-i 显示所有网络接口的信息。 3&#xff09;-r 显示路由表的信息。 4&#xff09;-s 显示按各个协议的统计信息。 5&am…

若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源

目录 一、若依平台配置 二、编写oracle数据库访问的各类文件 三. 一个方法操作多个数据源 一、若依平台配置 1、在ruoyi-admin的pom.xml添加依赖 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version…

ElasticSearch 批量插入漏数据

项目场景&#xff1a; 项目中需要把Mysql数据同步到ElasticSearch中 问题描述 数据传输过程中数据不时出现丢失的情况&#xff0c;偶尔会丢失一部分数据&#xff0c;本地测试也无法复现&#xff0c;后台程序也没有报错&#xff0c;一到正式环境就有问题,很崩溃 这里是批量操…

mysql基于软件包升级

注意&#xff1a;无论是什么升级都是有风险的&#xff0c;升级前都需要做一次全备份。 mysql简单备份和恢复-CSDN博客 本文章以5.7升级为8.0为案例演示。 0、准备 1、安装mysql5.7&#xff0c;5.7版本mysql安装演示mysql-linux归档版安装-CSDN博客 2、在官网下载8.0压缩包M…

华为分享---手机往电脑发送失败的处理

使用华为分享时&#xff0c;电脑往手机端发送正常&#xff0c;手机发往电脑时&#xff0c;电脑无反应&#xff0c;手机提示失败。 当晚联系华为在线客服&#xff0c;几经转接没有解决&#xff0c;登记过后等上级客户电话解决指示。 第二天没有电话&#xff0c; 第三天上午时…

MySQL中表的增删改查

目录 一、CRUD 二、新增&#xff08;Create&#xff09; &#xff08;1&#xff09;语法 &#xff08;2&#xff09;单行数据全列插入 &#xff08;3&#xff09;多行数据指定列插入 三、查询&#xff08;Retrieve&#xff09; &#xff08;1&#xff09;语法 …

SortableJS:vuedraggable实现元素拖放排序

文档&#xff1a;https://sortablejs.github.io/Sortable/github&#xff1a;https://github.com/SortableJS/SortableVue2: https://github.com/SortableJS/Vue.DraggableVue3: https://github.com/SortableJS/vue.draggable.nextnpm https://www.npmjs.com/package/vuedragga…

k8s-服务网格实战-入门Istio

istio-01.png 背景 终于进入大家都比较感兴趣的服务网格系列了&#xff0c;在前面已经讲解了&#xff1a; 如何部署应用到 kubernetes服务之间如何调用如何通过域名访问我们的服务如何使用 kubernetes 自带的配置 ConfigMap 基本上已经够我们开发一般规模的 web 应用了&#xf…

c++-二叉树进阶

文章目录 前言一、二叉搜索树1、二叉搜索树介绍2、二叉搜索树循环实现3、二叉搜索树递归实现4、二叉搜索树的性能分析5、二叉搜索树的应用6、二叉树练习题6.1 根据二叉树创建字符串6.2 二叉树的层序遍历6.3 二叉树的层序遍历 II6.4 二叉树的最近公共祖先6.5 二叉搜索树与双向链…

ElasticSearch搜索技术深入与聚合查询实战

ES分词器详解 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 分词发生时…

绝缘栅双极型晶体管igbt短路如何用自动化软件进行测试?

IGBT短路测试是指对IGBT(绝缘栅双极型晶体管)在短路情况下的性能进行测试。这种测试通常是通过检测开关管主功率两端的电压来实现的&#xff0c;也称为退饱和检测。当IGBT发生短路时&#xff0c;电流会急剧增加&#xff0c;IGBT的集电极-发射极两端电压VCE会从饱和状态进入线性…