QT进度条代理的实现

news2025/1/13 3:33:39

目的

进度条也是一个基本的功能,这里进度条想在Tableview里面实现,让Tableview其中一个单元格显示进度条,因为就用了代理。
什么是代理,官方说:
代理(Delegate)就是在视图组件上为编辑数据提供编辑器,如在表格组件中编辑一个单元格数据时,缺省是使用一个OLineEdit编辑框。
代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。
这个代理,我理解时,也感觉挺复杂,又做这做那的。
其实想想,其非常的简单,代理就是新的控件替换了原来控件的部分或者全部功能,新的控件就叫代理;就是对别的控件的引入,就是这么简单,在使用中,慢慢体验。

实现过程

滚动条的代理实现:

#include "progressbardelegate.h"
ProgressBarDelegate::ProgressBarDelegate(QObject *parent) :
    QItemDelegate(parent)
{
}
void ProgressBarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    //if(index.isValid() && index.column() == 1)
    if(index.isValid())
    {
        int value = index.model()->data(index).toInt();
        QStyleOptionProgressBar progressBarOption;
        //progressBarOption.rect = option.rect.adjusted(4, 4, -4, -4);
        progressBarOption.rect = option.rect;
        progressBarOption.minimum = 0;
        progressBarOption.maximum = 100;
        progressBarOption.textAlignment = Qt::AlignRight;
        progressBarOption.textVisible = true;
        progressBarOption.progress = value;
        progressBarOption.text = tr("%1%").arg(progressBarOption.progress);
        painter->save();
        if (option.state & QStyle::State_Selected) {
            painter->fillRect(option.rect, option.palette.highlight());
                    painter->setBrush(option.palette.highlightedText());
        }
        QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
        painter->restore();
    }
    else
    {
        QItemDelegate::paint(painter, option, index);
    }
}

滚动条的代理的应用:

.......
m_delegate = new ProgressBarDelegate();
    //ui->tableView->setItemDelegate(m_delegate);
    ui->tableView->setItemDelegateForColumn(1, m_delegate);
    timer = new QTimer();
    connect(timer, &QTimer::timeout, this, &MainWindow::download);
    timer->setInterval(1000);
    timer->start();
....
    void MainWindow::download()
{
    for(auto i = 0; i < this->m_tableViewModel->getStandardItemModel()->rowCount(); i++)
    {
        int value = this->m_tableViewModel->getStandardItemModel()->index(i,1).data().toInt();
        value++;
        this->m_tableViewModel->getStandardItemModel()->setData(this->m_tableViewModel->getStandardItemModel()->index(i,1), value);
    }
}

最终的效果:
在这里插入图片描述

总结

这个效果实现的关键在于:
void ProgressBarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
QItemDelegate,该类提供了在视图中绘制项目数据和编辑项目模型中的数据的函数的默认实现。
提供了在QAbstractItemDelegate中定义的paint()和sizeHint()虚拟函数的默认实现,以确保委托实现视图所期望的正确基本行为。
您可以在子类中重新实现这些函数,以自定义项的外观。
这一个函数的实现,这一个函数的目的就是控件状态,包括默认状态等状态,简单来说就是显示的样子。
因为,没有用到编辑,所以那些Edit相碰的函数都没有写,比如 createEditor(…),setModelData(…)
这就是进度控件代理的实现。
其本质就是在一个控件上引入了另一个控件,代理就是引入的那个控件,这里代理就是ProgressBarDelegate,这样就会明白很多:
这里的代理就是替换的意思,控件2替换了控件1部分区域的行为,那么控件2就是代理:
代理控件2以控件1的名义进行行为,实际执行的就是代理控件1的行为,因为这里是一种替换的关系。
在这里插入图片描述

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

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

相关文章

Kindle刷机安装微信读书。

1、越狱 2、安装软件 3、刷机 4、安装微信读书 刷机参考链接&#xff1a; https://www.xiaohongshu.com/explore/63d3f730000000001f027d0e?sourcequestion Kindle 通用越狱教程&#xff1a;适用固件版本 5.12.2.2~5.14.2 – 书伴 正式开始了。 1、越狱&#xff0c;参考…

[Flask] Flask会话

由于HTTP的无状态性&#xff0c;为了使某个域名下的所有网页能够共享某些数据&#xff0c;Cookie和Session应运而生 1.Cookie对象 HTTP是无状态(stateless)协议&#xff0c;一次请求响应结束后&#xff0c;服务器不会留下任何关于对方状态的信息 也就是说&#xff0c;尽管在…

2023年数字人产业发展趋势报告:好看的皮囊到有趣的灵魂

报告来源&#xff1a;腾讯研究院 报告看点&#xff1a;随着交互智能技术的加速发展&#xff0c;数字人正在从技术创新走向产业应用。 在腾讯2022数字生态大会腾讯云智能专场上&#xff0c;腾讯研究院、腾讯云智能、创业黑马经过产业研究、实地调研&#xff0c;共同提炼发布《数…

【Spring】Spring Bean 容器的生命周期是什么样的?

文章目录 一、什么是 Spring Bean 的生命周期&#xff1f;二、Spring 中的 bean 的作用域有哪些?三、Spring Bean 的生命周期四、Spring Bean 的生命周期流程图 一、什么是 Spring Bean 的生命周期&#xff1f; 对于普通的 Java 对象&#xff0c;当 new 的时候创建对象&#…

智头条|2023TUYA开发者大会精彩不断,IDC预测:2026年全球AI服务支出将增至646亿美元

1、行业动态 奢侈品巨头LVMH宣布将推出元宇宙项目“The Journey” 近日&#xff0c;奢侈品巨头LVMH宣布推出元宇宙项目“The Journey”&#xff0c;允许旗下用户进入一个拥有专属产品和体验的全新虚拟世界&#xff0c;目前官网显示该元宇宙项目下包括The Showroom、The Tech …

HotSpot 垃圾收集器

HotSpot 垃圾收集器 HotSpot 虚拟机提供了多种垃圾收集器&#xff0c;每种收集器都有各自的特点&#xff0c;虽然我们要对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。 新生代垃圾收集器 Serial 垃圾收集器&am…

Tomcat的部署及优化

目录 1.Tomcat概述 1.1 Tomcat的组件构成​编辑 1.2 Tomcat功能组件结构 1.3 Tomcat的请求过程 2. Tomcat服务的部署 2.1 搭建Tomcat运行环境 3.设置JDK环境变量​ 3.1测试java环境 4.安装启动Tomcat 1.Tomcat概述 Tomcat 是 基于Java 语言开发的Tomcat 属于轻量级应用服务…

数据结构 | 顺序线性表

一、数据结构定义 typedef int SqlTableType;typedef struct seqTable{int MAXNUM; // 最大元素个数 int curNum; // 元素的个数SqlTableType* element; // 连续空间的起始地址 }*SqlTable; 二、方法概览 SqlTable CreateSqlTable(int max); // 创建空顺序表 …

MySQL——mha高可用

MHA的概念 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过…

【Android -- 面试】程序员面试必备软技能,值得收藏!

文章目录 一、准备技术型简历1. 准备简历模板2. 准备个⼈信息3. 准备专业技能4. 准备⼯作经历5. 准备项⽬经历 二、面试前的准备1. 利用脑图来梳理知识点2. 收到面试邀请后的准备 三、面试的注意事项1. ⾃我介绍2. 技术考察3. 向⾯试官提问4. 面试礼仪 四、如何通过 HR ⾯1. HR…

数据结构 | 顺序栈

一、数据结构定义 typedef int StackType; typedef struct seqStack{int MAXNUM; // 最大元素个数 int top; // 栈顶位置&#xff0c;初始化为0或-1StackType element[100]; // 元素的连续空间的起始地址 } *SeqStack; 二、方法概览 SeqStack CreateSqlStack…

【服务器数据恢复】ZFS文件系统下raid5数据恢复案例

服务器数据恢复环境&#xff1a; 某公司一台EMC某型号存储中有一组由12块硬盘组建的raid5磁盘阵列&#xff0c;其中有2块盘作为热备盘使用。 服务器故障&分析&#xff1a; raid5磁盘阵列中有2块磁盘离线&#xff0c;只有1块热备盘成功启用&#xff0c;另外一块热备盘未启用…

Elastic 栈中的 Kibana安装

Kibana 是一个开源分析和可视化平台&#xff0c;旨在与 Elasticsearch 协同工作。 你使用 Kibana 搜索&#xff0c;查看和与存储在 Elasticsearch 索引中的数据进行交互。 你可以轻松执行高级数据分析&#xff0c;并在各种图表&#xff0c;表格和地图中可视化你的数据。 官方链…

文件批量下载方法 文件批量下载工具

软件版本&#xff1a;Internet Download Manager 在当今数字化时代&#xff0c;我们日常使用电脑进行各种工作和娱乐活动。有时候&#xff0c;我们需要从互联网上下载大量文件&#xff0c;例如电影、音乐、文档等。在这种情况下&#xff0c;手动逐个下载文件将变得繁琐而耗时。…

梯度下降法求函数的解

题目 例如 y x^ 5 e^x3x−3&#xff0c;求解y 0的解 问题分析 首先要构造y 0的损失函数&#xff0c;让这个损失函数是凸的&#xff0c;也就是可以有最优解&#xff0c;并且是可到的&#xff0c;比较容易想到的是mse平方误差&#xff0c;我们要让y和0之间绝对误差最小。lo…

变压器铜铝材质分析仪技术参数

一、主要技术指标 1.输入特性 有源部分&#xff1a; 电压测量范围&#xff1a;0~10V 电流测量范围&#xff1a;0~10A 无源部分&#xff1a; 电压测量范围&#xff1a;0~750V 宽量限&#xff08;可以外接电压互感器&#xff09;。 电流测量范围&#xff1a;0~100A内部自动…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 28 日论文合集)

文章目录 一、检测相关(6篇)1.1 Detector-Free Structure from Motion1.2 Irregular Change Detection in Sparse Bi-Temporal Point Clouds using Learned Place Recognition Descriptors and Point-to-Voxel Comparison1.3 Transferability Metrics for Object Detection1.4 …

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了&#xff0c;在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

精彩回顾 | 迪捷软件亮相2023飞机航空电子国际论坛

2023年6月29日&#xff0c;2023&#xff08;第十二届&#xff09;飞机航空电子国际论坛&#xff08;以下简称论坛&#xff09;在上海市圆满落幕。论坛由中国航空学会、中国航空研究院、中航机载系统有限公司共同主办&#xff0c;中国航空无线电电子研究所、航空电子系统综合技术…

SpringCloud-Gateway网关全悉

1&#xff09;概述 使用说明文档 其他版本api文档请自由查阅&#xff1a; https://spring.io/projects/spring-cloud-gateway#learn 1.1&#xff09;是什么 Cloud全家桶中有个很重要的组件就是api网关&#xff0c;在1.x版本中都是采用的Zuul网关&#xff0c;但在2.x版本中&a…