QTableView中添加代理控件

news2024/9/29 13:15:24

目录

1、设置样式文件

2、set base attribute

 3、设置model

4、设置表头

5、设置数据     

6、添加代理控件

6.1 添加 QSpinBox 代理 

6.2 添加 QComboBox 代理

6.3 添加 QPushButton 代理

6.4 添加 CheckBox 代理 

6.5 添加 Pixmap 代理

6.6 添加 LineEdit 代理

6.7 添加 ReadOnly 代理

6.8 添加 Text 代理 

6.9 添加 QProcessBar 代理

6.10 添加 DateEdit 代理

6.11 添加 添加自定义窗口 代理 

6.13 添加 DoubleProcessBar 代理

7、获取某一单元格数据 


开发过程中进程使用MVD模型,添加各种代理控件,本文在此基础上整理一些数据模型代理,包括:QPushbutton、QLineEdit、QPixmap、QChecledBox、QComboBox、QSpinBox、QProcessBar、只读列、自定义窗口等共13种代理方式,如图所示:

1、设置样式文件

QString qssData = nullptr;
QFile fileqss(":/qss/QSSUITableView");
if(fileqss.open(QFile::ReadOnly))
{
        qssData = fileqss.readAll();
        fileqss.close();
}
ui->tableView->setStyleSheet(qssData);

2、set base attribute

    ui->tableView->verticalHeader()->hide();                                                   // 隐藏垂直头
    ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);                       // 隐藏水平头
    //ui->tableView->horizontalHeader()->setStretchLastSection(true);                          // 设置随后一列拉伸
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);         // 设置列平均分配
    //ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);  // 设置TreeWidget水平滚动和自适应宽度
    //ui->tableView->setColumnWidth(headersList.count() - 1, TITLE_FIXED_HEIGHT);              // 设置最后一列固定
    //ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);      // 行单选
    ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::MultiSelection);         // 行多选 (单选QAbstractItemView::SingleSelection 多选:QAbstractItemView::MultiSelection)
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);                         // 不可编辑
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);                        // 设置选中模式为整行
    ui->tableView->setShowGrid(false);                                                         // 显示/隐藏网格线
    setFocusPolicy(Qt::FocusPolicy::NoFocus);                                                  // 设置选中之后无虚线焦点
    //horizontalHeader()->setMinimumSectionSize(100);                                          // 设置最小列宽
    //horizontalHeader()->setMaximumSectionSize(100);                                          // 设置最大列宽
    ui->tableView->verticalHeader()->setDefaultSectionSize(25);                                 // 可以设置tableview所有列的默认行高为15。
    //horizontalHeader()->setDefaultSectionSize(15);                                            // 可以设置tableview所有行的默认列宽为15。
    ui->tableView->setWordWrap(false);                                                         // 设置不自动换行
    setMouseTracking(true);                                                                     // 设置鼠标追踪

    // 设置第0列固定宽度
    /*
    ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
    ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
    ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed);
    ui->tableView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
    ui->tableView->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Fixed);
    ui->tableView->horizontalHeader()->setSectionResizeMode(5, QHeaderView::Fixed);
    ui->tableView->setColumnWidth(0, 50);
    ui->tableView->setColumnWidth(2, 150);
    ui->tableView->setColumnWidth(3, 150);
    ui->tableView->setColumnWidth(4, 150);
    ui->tableView->setColumnWidth(5, 150);
    */

 3、设置model

    model = new QStandardItemModel;
    ui->tableView->setModel(model);

4、设置表头

    QStringList headerList;
    headerList<<"姓名"<<"QSpinBox"<<"QComboBox"<<"QPushButton"<<"CheckBox"<<"QPixmap"<<"QLineEdit"<<"ReadOnly"<<"Text"<<"ProcessBar"<<"DateEdit"<<"CustomWidget"<<"pDoubleProcessBar";
    model->setHorizontalHeaderLabels(headerList);

5、设置数据     

    model->setItem(0,0,new QStandardItem("张三"));
    model->setItem(1,0,new QStandardItem("李四"));
    model->setItem(2,0,new QStandardItem("王二"));
    model->setItem(3,0,new QStandardItem("小明同学"));

    model->setItem(0,1,new QStandardItem("1"));
    model->setItem(1,1,new QStandardItem("2"));
    model->setItem(2,1,new QStandardItem("3"));

    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);         // 选择一行

6、添加代理控件

6.1 添加 QSpinBox 代理 

    CUISpinBoxDelegate *pSpinBox = new CUISpinBoxDelegate(this);
    ui->tableView->setItemDelegateForColumn(1, pSpinBox);

6.2 添加 QComboBox 代理

    CUIComboBoxDelegate *pComboBox = new CUIComboBoxDelegate(this);
    ui->tableView->setItemDelegateForColumn(2, pComboBox);

6.3 添加 QPushButton 代理

    CUIMutipleButtonDeleagate *pMutipleBtn = new CUIMutipleButtonDeleagate(QStringList() << "修改" << "删除", this);

    ui->tableView->setItemDelegateForColumn(3, pMutipleBtn);

    connect(pMutipleBtn, &CUIMutipleButtonDeleagate::editData, [&](){
        QMessageBox::information(this, "提示", "这是一个编辑按钮");
    });
    connect(pMutipleBtn, &CUIMutipleButtonDeleagate::deleteData, [&](){
        QMessageBox::information(this, "提示", "这是一个删除按钮");
    });

6.4 添加 CheckBox 代理 

    /*CUITableHeaderView **/pTableHeaderView = new CUITableHeaderView(Qt::Horizontal, ui->tableView);

    connect(pTableHeaderView, &CUITableHeaderView::stateChanged, this, &MainWindow::headerStateChangedSlot);
    connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(itemChangedSlot(QStandardItem*)));

    ui->tableView->setHorizontalHeader(pTableHeaderView);

    CUICheckBoxDelegate *pCheckedBox = new CUICheckBoxDelegate(this);
    ui->tableView->setItemDelegateForColumn(4, pCheckedBox);

6.5 添加 Pixmap 代理

    CUIPixmapDelegate *pPixmap = new CUIPixmapDelegate(this);
    ui->tableView->setItemDelegateForColumn(5, pPixmap);

6.6 添加 LineEdit 代理

CUILineEditDelegate *pLineEdit = new CUILineEditDelegate(this);

6.7 添加 ReadOnly 代理

    CUIOnlyReadDelegate *pReadOnly = new CUIOnlyReadDelegate(this);
    ui->tableView->setItemDelegateForColumn(7, pReadOnly);

6.8 添加 Text 代理 

    CUITextDelegate *pLabel = new CUITextDelegate(this);
    ui->tableView->setItemDelegateForColumn(8, pLabel);

6.9 添加 QProcessBar 代理

    CUIProcessBarDelegate *pProcessBar = new CUIProcessBarDelegate();
    ui->tableView->setItemDelegateForColumn(9, pProcessBar);
    
    QModelIndex index = model->index(0, 9, QModelIndex());
    model->setData(index,29);

6.10 添加 DateEdit 代理

    CUIDateEditDelegate *pDateEdit = new CUIDateEditDelegate();
    ui->tableView->setItemDelegateForColumn(10, pDateEdit);

6.11 添加 添加自定义窗口 代理 

    CUICustomDelegate *pCustomWidget = new CUICustomDelegate(this);
    ui->tableView->setItemDelegateForColumn(11, pCustomWidget);

6.13 添加 DoubleProcessBar 代理

    CUIDoubleProcessBarDelegate *pDoubleProcessBar = new CUIDoubleProcessBarDelegate(this);
    ui->tableView->setItemDelegateForColumn(12, pDoubleProcessBar);

7、获取某一单元格数据 

    //model->index(0, 1).data();

详细代码下载

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

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

相关文章

部署环境从docker swarm迁移到k8s后kie-server的发布方式变化

书接swarm https://cloud.tencent.com/developer/news/475316 swarm的集群部署非常简单,但领导说docker和 docker swarm都不想用 换k8s ok 哦另外, k8s的CRI运行时 也不用docker 而是用containerd 完成. 但发现一个问题 ,k8s没有暂停pod的概念. 同时containerd没有暂停容器的…

Scrum of Scrums规模化敏捷开发管理全流程

Scrum of Scrums是轻量化的规模化敏捷管理模式&#xff0c;Leangoo领歌可以完美支持Scrum of Scrums多团队敏捷管理。 Scrum of Scrums的场景 Scrum of Scrums是指多个敏捷团队共同开发一个大型产品、项目或解决方案。Leangoo提供了多团队场景下的产品路线图规划、需求管理、…

可选择的Elasticsearch好用的可视化客户端工具

前言 常言道&#xff1a;工欲善其事&#xff0c;必先利其器。对于我们开发和测试同学来说&#xff0c;在日常的工作中有一款趁手的工具那真实如虎添翼啊&#xff0c;工作效率可是蹭蹭蹭的往上长&#xff0c;节省下来的时间摸摸鱼该有多好啊。最近我们系统开始使用elasticsearc…

【计算机网络-数据链路层】广域网(WAN)

文章目录1 广域网的概念2 PPP 协议2.1 PPP 帧的格式2.2 PPP 帧的透明传输2.2.1 面向字节的透明传输——字符填充法2.2.2 面向比特的透明传输——零比特填充法2.3 PPP 协议的工作状态1 广域网的概念 广域网&#xff08;Wide Area Network&#xff0c;WAN&#xff09;&#xff0…

【python】面向对象编程,这么大一个对象你不要嘛?

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 万物皆是对象&#xff0c;Python当然支持面向对象编程。 类和对象是面向对象编程的两个主要方面&#xff0c;类创建一个新的对象&#xff0c;对象是这个类的实例。 对象可以使用类的变量&#xff0c;属于对象或类的变量…

MyBatis01 学习遇到的错误

错误1 java.lang.NullPointerException at com.utils.MybatisUtils.getSqlSession(MybatisUtils.java:34) at com.dao.UserDaoTest.test(UserDaoTest.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.…

进程间通信方式

每个进程的用户地址空间都是独立的&#xff0c;一般而言是不能互相访问的&#xff0c;但内核空间是每个进程都共享的&#xff0c;所以进程之间要通信必须通过内核。 管道 管道传输数据是单向的&#xff0c;如果想相互通信&#xff0c;我们需要创建两个管道才行。 「|」表示的…

前端引入和html标签

先安装 flask模块 pip install flask from flask import Flaskapp Flask(__name__)#创建了网址 /show/info 和函数index的对应关系 #以后用户在浏览器上访问 /show/info&#xff0c;网站自动执行 index app.route("/show/info") def index():return "西安钟楼…

Vivado自带仿真器:真的不好用吗?

Vivado仿真器不好用&#xff1f;如果你还不熟悉它的操作方法&#xff0c;可能会有这种感觉。 实际上&#xff0c;与ModelsIm相比&#xff0c;Vivado仿真器的仿真速度稍慢&#xff0c;但是它的界面美观整洁&#xff0c;操作丰富且流畅&#xff0c;特别适合于调试仿真时间短的工…

JUC高级九-Synchronized与锁升级

1. synchronized 锁优化的背景 用锁能够实现数据的安全性&#xff0c;但是会带来性能下降。无锁能够基于线程并行提升程序性能&#xff0c;但是会带来安全性下降。 为求平衡将synchronized优化为不在是无所和重锁两个状态,新增偏向锁和轻量级锁来平衡安全性和性能问题 synchro…

【一起啃书】《机器学习》第四章决策树

第四章 决策树 4.1 基本流程 决策树是一类常见的机器学习方法&#xff0c;是基于树结构来进行决策的&#xff0c;通过对训练样本的分析来确定划分属性&#xff0c;来模拟人类决策过程。 一般的&#xff0c;一棵决策树包含一个根结点、若干个内部结点和若干个叶结点&#xff0c;…

分页查询工具类

package xyz.huanggy.minio.upload.Util; import java.util.ArrayList; import java.util.List; public class PageBean<T> {/*** 功能&#xff1a;分页工具类*/private int pageSize; // 每页记录数private int pageNo; // 当前页private int totalPages; // 总页数priv…

【Redis】Lua快速入门使用

【Redis】Lua快速入门使用 文章目录【Redis】Lua快速入门使用1. 概述2. 数据类型2.1 变量2.2 循环3. 函数4. 条件控制1. 概述 Lua 是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放&#xff0c; 其设计目的是为了嵌入应用程序中&#xff0c;从而为应用…

vue+Nodejs+Koa搭建前后端系统(二)--koa-generator创建项目及分析

前言 采用上一篇vueNodejsKoa搭建前后端系统&#xff08;一&#xff09;–简易版创建的项目目录的基础上&#xff0c;创建新的后端服务项目server2使用koa-generator脚手架创建后端项目计算机系统为Windows 10 专业版 小说中&#xff0c;终成眷属一般就结局了&#xff0c;但现…

ESP32在ESP-IDF框架下为LVGL(v8.3)配置SD卡文件系统

踩坑记录 1、如果SD卡曾经做过系统盘&#xff08;比如说&#xff1a;作为树莓派的系统盘&#xff09;&#xff0c;那么要把系统盘的分区合并成一个&#xff08;这个网上有很多教程&#xff09;&#xff0c;并重新格式化&#xff0c;否则实验会失败。 2、并不是买回来的新的SD卡…

基于Vant组件库二次封装组件(TS+Vue3.x环境)

1. 今天的需求是封装一个 Navigation Bar 导航栏组件&#xff0c;目的是给到App几乎所有的页面复用&#xff1a; 2. 因为之前的项目里使用过Vant组件库&#xff0c;笔者第一时间想到了Vant组件库中的 NavBar 组件&#xff0c;和当前App的需求匹配度很高。Vant组件库的 NavBar 组…

压箱底教程分享,手把手教会你如何注册target账号和下单

喜欢套利的朋友肯定都认识target这个平台吧&#xff0c;它是美国热门的综合性海淘网站之一。东哥近日收到私信有朋友向我请教在注册target账号时遇到的一些问题&#xff0c;所以今天东哥想跟大家分享的就是就是target账号注册教程和下单流程&#xff0c;让也想注册target账号的…

软考第五章 无线通信网

无线通信网 无线通信网包括面向语音通信的移动电话系统以及面向数据传输的无线局域网和无线广域网。 WiFI底层是如何传输数据的呢 1.移动通信 1.1 蜂窝通信系统 1980年中期&#xff0c;欧洲和日本都建立了第一代蜂窝移动电话系统。蜂窝网络把一个地理区域划分成若干个称为…

Vue2-黑马(五)

目录&#xff1a; &#xff08;1&#xff09;vue2-组件重用 &#xff08;2&#xff09;vue2-element ui安装 &#xff08;3&#xff09;vue2-ElementUI-table &#xff08;4&#xff09;Element-ui-分页pagination &#xff08;1&#xff09;vue2-组件重用 页面上有很多的…

PyTorch中的符号索引和函数索引用法

Pytorch中很多函数都采用的是函数式索引的思路&#xff0c;而且使用函数式索引对代码可读性会有很大提升。 张量的符号索引 张量也是有序序列&#xff0c;我们可以根据每个元素在系统内的顺序位置&#xff0c;来找出特定的元素&#xff0c;也就是索引。 一维张量的索引 一维…