qt表格模型视图

Qt 提供了一套强大的模型/视图框架,允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中,表格视图(TableView)和模型(TableModel)是这种框架的一部分,常用于显示和编辑表格数据。

以下是一些基本的概念和步骤,帮助你理解如何在 Qt 中使用表格模型和视图:

  1. 模型(Model)
    模型是数据的抽象表示。在 Qt 中,模型负责存储数据,并提供一种方式来访问这些数据。QAbstractTableModel 是一个常用的基类,用于创建自定义的表格模型。

  2. 视图(View)
    视图是模型的可视化表示。QTableView 是一个表格视图,显示模型中的数据,并允许用户与数据进行交互。

  3. 代理(Delegate)
    代理用于自定义视图中的单元格的显示和编辑方式。QStyledItemDelegate 或自定义的 QItemDelegate 可以用于此目的。

  4. 编辑器(Editor)
    编辑器是用于编辑单元格的组件。例如,QLineEdit 可以用于编辑文本。

  5. 选择模型(Selection Model)
    选择模型用于管理用户在视图中的选择。请添加图片描述

#include "mytablemodel.h"
#include <QtMath>
#include <QColor>MyTableModel::MyTableModel(QObject *parent) : QAbstractTableModel(parent)
{m_columnNum=9;
}void MyTableModel::setInitData(QList<CellInfo*>& data)
{//重置model数据之前调用beginResetModel,此时会触发modelAboutToBeReset信号beginResetModel();//重置model中的数据m_datas = data;m_rowNum = ceil(data.size()*1.0/m_columnNum);   //行数=数据总数/列数,然后向上取整//数据设置结束后调用endResetModel,此时会触发modelReset信号endResetModel();
}int MyTableModel::rowCount(const QModelIndex &parent) const
{if (parent.isValid()) {return 0;} else {return m_rowNum;}
}int MyTableModel::columnCount(const QModelIndex &parent) const
{if (parent.isValid()) {return 0;} else {return m_columnNum;}
}QVariant MyTableModel::data(const QModelIndex &index, int role) const
{if (!index.isValid()) {return QVariant();}if(index.row()*m_columnNum+index.column() < m_datas.count()){if (role == Qt::DisplayRole ||  role == Qt::EditRole) {return m_datas[index.row()*m_columnNum+index.column()]->content;//数据的呈现形式}else if(role == Qt::BackgroundColorRole){return m_datas[index.row()*m_columnNum+index.column()]->bgColor;//单元格背景色}else if (role == Qt::TextAlignmentRole) {    //对其方式return Qt::AlignCenter;}else if(role == Qt::ToolTipRole){return m_datas[index.row()*m_columnNum+index.column()]->toolTip;//数据的提示信息}else if(role == Qt::UserRole){return QVariant::fromValue(m_datas[index.row()*m_columnNum+index.column()]);}}return QVariant();
}Qt::ItemFlags MyTableModel::flags(const QModelIndex &index) const
{if (!index.isValid())return Qt::NoItemFlags;return Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable;
}bool MyTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{if(index.row()*m_columnNum+index.column() < m_datas.count()){if (index.isValid() && role == Qt::EditRole){m_datas[index.row()*m_columnNum+index.column()]->content = value.value<QString>();emit dataChanged(index, index, QVector<int>() << role);                     //发送信号触发刷新return true;}if (index.isValid() && role == Qt::BackgroundColorRole){m_datas[index.row()*m_columnNum+index.column()]->bgColor = value.value<QColor>();emit dataChanged(index, index, QVector<int>() << role);                     //发送信号触发刷新return true;}}return false;
}

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

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

相关文章

利用Java调用银行卡二要素接口

一、什么是银行卡二要素&#xff1f; 银行卡二要素验证接口是一种 API 接口&#xff0c;主要用于验证用户提供的银行卡号与姓名这两个要素是否一致。 二、银行卡二要素作用及场景有哪些&#xff1f; 其作用是通过核验用户的身份信息&#xff0c;判断是否为目标用户本人操作&…

Apache Spark:深度解析

文章目录 引言Apache Spark 官网链接Spark 的原理1. 核心组件2. 弹性分布式数据集&#xff08;RDD&#xff09;3. 执行模型 基础使用1. 环境搭建2. 示例代码 高级功能1. DataFrame 和 Dataset2. 机器学习3. 流处理 优缺点优点缺点 结论 引言 Apache Spark 是一个快速、通用、可…

[Github] Github网络错误,与VPN代理相关

报错类型&#xff1a; OpenSSL SSL_connect: Connection was reset in connection to http://github.com:443 前提&#xff1a;计算机已经开了VPN代理&#xff0c;造成无法正常通过github完成push/pull等操作 解决方法&#xff1a; 在终端中输入&#xff1a; git config -…

Lua 复数计算器

Lua复数计算器 主要包括复数的加减乘除操作&#xff0c;以及打印 编写复数类 -- ***** 元类 ***** Complex {real 0, imag 0}-- 构造函数 function Complex:new(real, imag)local o o or {}o.real real or 0o.imag imag or 0setmetatable(o, self)self.__index selfr…

【初阶数据结构】8.二叉树(3)

文章目录 4.实现链式结构二叉树4.1 前中后序遍历4.1.1 遍历规则4.1.2 代码实现 4.2 结点个数以及高度等4.3 层序遍历4.4 判断是否为完全二叉树4.5层序遍历和判断是否为完全二叉树完整代码 4.实现链式结构二叉树 用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑关系…

space desk设备屏幕拓展软件

在正常开发的时候一般采用多个屏幕的方式来提高效率&#xff0c;这时就采用hdmi和vga拓展的形式&#xff0c;前提是屏幕但往往有电源以及续航不够的问题&#xff0c;不太方便出门在外的话 这时我就推荐大家使用软件无线连接的形式 进行软件下载下图为投影端可以在pc端下载 我…

如何保护您的 WordPress 不被黑?

明月可以说是见到过太多 WordPress 网站被黑的示例了&#xff0c;加上平时明月也会接一些 WordPress 疑难杂症的解决服务订单&#xff0c;所以这方面绝对是专业对口了。作为一个资深 WordPress 博客站长&#xff0c;谁都有被黑过的经历&#xff0c;都是一步步走过来的&#xff…

【数据结构】搜索二叉树

二叉搜索树 二叉树的博客 在之前的数据结构的文章中已经基本对二叉树有一定的了解&#xff0c;二叉搜索树也是一种数据结构&#xff0c;下面将对二叉搜索树进行讲解。 二叉搜索树的概念 二叉搜索树又称为二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有下面性…

ObservableCollection新增数据前判断数据是否存在

public class MyDataModel {public int Id { get; set; }public string Name { get; set; }}public static void Main(){// 创建 ObservableCollectionObservableCollection<MyDataModel> myDataCollection new ObservableCollection<MyDataModel>{new MyDataMode…

[运维]解决Docker拉取镜像失败问题

问题描述 Docker 拉取镜像失败&#xff0c;报错如下&#xff1a; error pulling image configuration: download failed after attempts6: read tcp 192.168.10.2:55372->104.16.99.215:443: read: connection reset by peer一开始是xxx: Pulling fs layer&#xff0c;随后…

外贸SOHO如何选择企业邮箱

外贸SOHO&#xff08;Small Office Home Office&#xff09;企业正以前所未有的速度崛起&#xff0c;然而&#xff0c;要在这片竞争激烈的蓝海中立足&#xff0c;高效的全球通信能力、坚实的安全防线、成本效益的考量以及专业的品牌形象塑造&#xff0c;缺一不可。本文旨在为外…

Python图形编程-在PyGame中使用OpenGL

在PyGame中使用OpenGL 文章目录 在PyGame中使用OpenGL1、使用PyGame初始化项目2、绘制物体3、迭代动画4、利用变换矩阵5、多重转换执行6、完整示例代码PyOpenGL是Python和OpenGL API之间的标准库,而PyGame是用于在Python中制作游戏的标准库。它提供了内置的图形和音频库,在本…

webStorm 实时模板笔记

文章目录 1、单斜杠效果 2、双斜杠效果 3、控制台打印效果 1、单斜杠 /** $END$ */效果 2、双斜杠 /*** $END$* author Ikun* since $DATE$ $TIME$ */DATE date() ✔ TIME time() ✔效果 3、控制台打印 console.log("███████$EXPR_COPY$>>>>&a…

前端调试合集(包含移动端/内嵌h5)

代码内使用方法 alert/console alert和console.log作为JS最基本的调试能力&#xff0c;提供了简易版的断点 (只能断一下) 和输出 (只能输出字符串) 能力&#xff0c;可以在代码运行到预期的位置输出预期的log&#xff0c;通过对不同流程下写入alert&#xff0c;输出变量的值来…

Java笔试分享

1、设计模式&#xff08;写>3种常用的设计模式&#xff09; 设计模式是在软件工程中解决常见问题的经验性解决方案。以下是一些常用的设计模式&#xff1a; 单例模式&#xff08;Singleton&#xff09;&#xff1a; 意图&#xff1a;确保一个类只有一个实例&#xff0c;并…

从0到1,AI我来了- (1)从AI手写数字识别开始

前两篇我们我们把控制台、Python环境Anaconda 搞定了&#xff0c;接下来&#xff0c;我们快速进入主题&#xff0c;把AI 界的“Hello World” 实现一下&#xff0c;有个感觉&#xff0c;再逐步了解一些AI的概念。 1、Pytorch 安装 1) 什么是Pytorch? 一个深度学习框架&#…

通信原理-实验六:实验测验

实验六 实验测验 一&#xff1a;测验内容和要求 测试需要完成以下几个步骤&#xff1a; 配置好以下网络图&#xff1b;占总分10%&#xff08;缺少一个扣一分&#xff09;根据下面图配置好对应的IP和网关以及路由等相关配置&#xff0c;保证设备之间连通正常&#xff1b;占总…

深入探讨 Java 语言的基本数据类型、字符串与数组

Java 语言自1995年推出以来&#xff0c;凭借其坚实的面向对象编程基础和跨平台特性&#xff0c;迅速成为全球最流行的编程语言之一。Java 的设计哲学之一是提供一套简单且高效的基本数据类型&#xff0c;同时具备强大的字符串处理和数组操作能力。本文将深入探讨 Java 的基本数…

加速决策过程:企业级爬虫平台的实时数据分析

摘要 在当今数据驱动的商业环境中&#xff0c;企业如何才能在海量信息中迅速做出精准决策&#xff1f;本文将探讨企业级爬虫平台如何通过实时数据分析加速决策过程&#xff0c;实现数据到决策的无缝衔接。我们聚焦于技术如何赋能企业&#xff0c;提升数据处理效率&#xff0c;…

NSS [NSSRound#13 Basic]flask?jwt?

NSS [NSSRound#13 Basic]flask?jwt? 开题 注册一下 要admin才能拿flag 看看是如何进行身份验证的 是flask session flask-unsign --decode --cookie .eJwtzjESwyAMBMC_UKfghJCEP-MRICZp7bjK5O9xkX6L_aR9HXE-0_Y-rnik_TXTlsiXEhUXleKGGGuG1jbmogrCEmNirZ7BEB-VJbTfIi-26hQD…