QStandardItemModel的role

news2024/11/27 8:39:41

在这里插入图片描述

QStandardItemModel定义了一些标准的角色,而QAbstractItemModel允许自定义角色。以下是一些常见的数据角色:

1. **Qt::DisplayRole**:这是最基本的角色,用于显示在视图中的文本。当一个单元格被绘制时,通常会查询这个角色来获取显示的数据。

2. **Qt::EditRole**:当用户尝试编辑单元格时,此角色的数据会被用于设置编辑框的初始值。编辑完成后,新值通常会通过这个角色更新回模型。

3. **Qt::DecorationRole**:用于显示单元格的图标或图像。例如,你可以设置一个勾选标记或颜色图标来表示特定状态。

4. **Qt::ToolTipRole**:当鼠标悬停在单元格上时,显示的工具提示文本。这对于提供额外的信息很有用。

5. **Qt::BackgroundRole** 和 **Qt::ForegroundRole**:分别用于设置单元格的背景色和前景色。这可以用来高亮某些行或列,或者根据数据值改变颜色。

6. **Qt::FontRole**:用于设置单元格内文本的字体。这可以用于强调某些内容或区分不同类型的数据显示。

7. **Qt::CheckStateRole**:用于复选框类型的单元格。如果数据模型支持,可以通过这个角色读取或设置单元格的选中状态。

8. **Qt::UserRole** 及以上:这些角色通常由开发者自定义,用于存储与视图无关但与模型相关的附加信息。


#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTableView>
#include<QStandardItemModel>

#include<QMenu>

class Widget : public QWidget
{
    Q_OBJECT


public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QTableView  view;
    QStandardItemModel model;
    QMenu menu;
    QStandardItem itemA;
    QStandardItem itemB;
    QStandardItem itemC;
    QStandardItem itemD;
    QStandardItem itemE;
    QStandardItem itemF;
    bool eventFilter(QObject* obj, QEvent *evt);//事件过滤器


public slots:
    void onDelete(void);


};
#endif // WIDGET_H

#include "widget.h"
#include<QEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent),
    view(this),
    model(this),
    menu(this)
{
    resize(200,150);//调整窗体大小


    //为itemA设置text
    itemA.setData("A",Qt::DisplayRole);
    //为itemB设置图标
    QPixmap pix(":/img/user.png");
    pix = pix.scaled(24,24,Qt::KeepAspectRatio);
    itemB.setData(pix,Qt::DecorationRole);
    //为itemC设置工具提示显示
    itemC.setData("C",Qt::ToolTipRole);
    //为itemD设置字体属性
    QFont font("Times", 10, QFont::Bold);
    itemD.setData("D",Qt::DisplayRole);
    itemD.setData(font,Qt::FontRole);
    //为itemE设置对齐方式
    itemE.setData("E",Qt::DisplayRole);
    itemE.setData(Qt::AlignHCenter,Qt::TextAlignmentRole);
    //为itemF设置渐变背景色
    QLinearGradient  back(0,0,100,30);
    back.setColorAt(0,Qt::white);
    back.setColorAt(0.5,Qt::green);
    back.setColorAt(1,Qt::blue);
    itemF.setData(QBrush(back),Qt::BackgroundRole);


    //设置表格的相应数值
    model.setItem(0,0, &itemA);
    model.setItem(0,1, &itemB);
    model.setItem(1,0, &itemC);
    model.setItem(1,1, &itemD);
    model.setItem(2,0, &itemE);
    model.setItem(2,1, &itemF);
    model.setItem(3,0, new QStandardItem("G"));
    model.setItem(3,1, new QStandardItem("H"));

    //设置视图只能选中一行,取消焦点,禁止编辑
    view.setFocusPolicy(Qt::NoFocus);//取消焦点
    view.setEditTriggers(QAbstractItemView::NoEditTriggers);//设置无法编辑
    view.setSelectionMode(QAbstractItemView::SingleSelection);//设置视图只能选择一个项目
    view.setSelectionBehavior(QAbstractItemView::SelectRows);//设置视图只能选择行
    view.setModel(&model);//视图显示模型

    view.installEventFilter(this);//设置事件过滤器

    menu.addAction("删除",this,SLOT(onDelete()));     //设置菜单项,并连接槽函数
}

void Widget::onDelete(void)
{
    model.removeRow(view.currentIndex().row());   //根据当前鼠标所在的索引的行位置,删除一行
}

//设置事件过滤器,实现通过事件过滤器来实现右击菜单效果
bool Widget::eventFilter(QObject* obj, QEvent *evt)
{
    if(obj == &view  &&  evt->type() == QEvent::ContextMenu) //被监视的组件为view,要转发的事件是上下文弹出菜单
    {
        if(view.currentIndex().isValid()==true)  //索引有效
        {
              menu.exec(cursor().pos());      //将菜单menu定位到当前鼠标位置
        }
    }
    return QWidget::eventFilter(obj,evt);//返回事件过滤器
}


Widget::~Widget()
{
}



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

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

相关文章

Go 语言应用开发:从入门到实战

Go 语言应用开发&#xff1a;从入门到实战 引言 Go&#xff08;Golang&#xff09;是由 Google 开发的一种开源编程语言&#xff0c;设计初衷是提高编程效率&#xff0c;尤其是在高并发场景下表现出色。Go 语言以其简洁、易学、高效并发的特性&#xff0c;逐渐成为开发者的首…

<Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得

原因 用ZhipuAI&#xff0c;测试用的PDF里&#xff0c;有国名西部省穆斯林&#xff0c;翻译结果返回 “系统检测到输入或生成内容可能包含不安全或敏感内容&#xff0c;请您避免输入易产生敏感内容的提 示语&#xff0c;感谢您的配合” 。想过先替换掉省名、民族名等&#xff…

DM8数据库用户和表空间管理

1 说明 DM8用户管理和表空间管理常用的管理命令&#xff0c;包括创建、修改和查看信息操作等。 2 用户管理 2.1 创建用户 创建一个用户lu9up&#xff0c;密码为"admin2024."&#xff0c;未制定表空间&#xff0c;使用默认的表空间main。 SQL> create user lu…

银河麒麟桌面操作系统V10:解决激活时“无法获取硬件信息(错误码#0017)”问题

银河麒麟桌面操作系统V10&#xff1a;解决激活时“无法获取硬件信息&#xff08;错误码#0017&#xff09;”问题 1、问题描述2、问题解决方法步骤一&#xff1a;打开终端步骤二&#xff1a;删除/etc/.kyhwid文件步骤三&#xff1a;重新激活系统总结 &#x1f490;The Begin&…

【Ubuntu】在Ubuntu上安装IDEA

【Ubuntu】在Ubuntu上安装IDEA 零、前言 最近换了Ubuntu系统&#xff0c;但是还得是要写代码&#xff0c;这样就不可避免地用到IDEA&#xff0c;接下来介绍一下如何在Ubuntu上安装IDEA。 壹、下载 这一步应该很容易的&#xff0c;直接打开IDEA的下载页面&#xff0c;点击下…

Python RabbitMQ 入门 pika

Python RabbitMQ 入门 RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff08;亦称面向消息的中间件&#xff09;。RabbitMQ服务器是用Erlang语言编写的&#xff0c;而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…

基于vue的酒店预订管理系统(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Paperless-ngx文档管理系统本地部署并实现远程使用搜索查阅文件

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统&#xff0c;并结合cpolar内网穿透工具解决本地部署…

Visual Studio 2022安装(含重生版)

前言&#xff1a; 昨天调试代码的时候发现程序怎么都运行不了&#xff0c;错误显示无法找到文件啊啊啊&#xff0c;能力有限&#xff0c;找不出错误源&#xff0c;然后就狠心删掉所有相关文件来“重新开始”&#xff01; 正文&#xff1a; 1.官网下载&#xff08;内定中文版…

欧科云链研究院深掘链上数据:洞察未来Web3的隐秘价值

目前链上数据正处于迈向下一个爆发的重要时刻。 随着Web3行业发展&#xff0c;公链数量呈现爆发式的增长&#xff0c;链上积聚的财富效应&#xff0c;特别是由行业热点话题引领的链上交互行为爆发式增长带来了巨量的链上数据&#xff0c;这些数据构筑了一个行为透明但与物理世…

前后分离项目记录

一.前端设置 1.打包问题 打包报错 Thread Loader时&#xff0c;增加以下代码&#xff1a; 上线&#xff0c;打包prod时: 2.上线时api设置 二.Nginx问题 1.缓存问题&#xff1a;添加如下代码以禁止缓存&#xff0c;否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加Cr…

六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询

本文基于六西格玛设计方法论&#xff0c;对消费级无人机的设计流程进行系统化研究&#xff0c;探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发&#xff0c;深入到关键KPI指标的制定&#xff0c;并逐步阐述…

十、索引优化与查询优化

文章目录 1. 数据准备2. 索引失效案例2.1 全值匹配我最爱2.2 最佳左前缀法则2.3 主键插入顺序2.4 计算、函数、类型转换(自动或手动)导致索引失效2.5 类型转换导致索引失效2.6 范围条件右边的列索引失效2.7 不等于(!=或者<>)索引失效2.8 is null 可以使用索引,is not …

STM32 USB CUBEMX

开发背景 使用的平台&#xff1a;STM32H750 注意事项 时钟必须是48MHZ&#xff0c;其它都不行 2. 将默认任务的堆栈设大一点 如果使用操作系统&#xff0c;USB任务跑在默认任务里&#xff0c;因此需要设置默认任务的堆栈缓存是直接定义的全局变量&#xff0c;需要设置编译器…

通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统

本文展示了如何使用阿里云向量检索Milvus和灵积&#xff08;Dashscope&#xff09;提供的通用千问大模型能力&#xff0c;快速构建一个基于专属知识库的问答系统。在示例中&#xff0c;我们通过接入灵积的通义千问API及文本嵌入&#xff08;Embedding&#xff09;API来实现LLM大…

中标麒麟操作系统:如何查看系统激活状态

中标麒麟操作系统&#xff1a;如何查看系统激活状态 1、图形界面查看方法方法一&#xff1a;任务栏查看方法二&#xff1a;通过“我的电脑”属性查看 2、命令行查看方法 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 本文将介绍两种查看系…

【AI 工具分享】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

自动驾驶系列—厘米级精度:RTK技术如何革新自动驾驶定位

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Python画图|多图共享X轴和Y轴

【1】引言 在python画图的众多场景中&#xff0c;存在多图对应X轴和Y轴可能一致的情形。 为此&#xff0c;尝试找到相关方法&#xff0c;不仅可以将代码写得更简洁&#xff0c;也更节省电脑内存&#xff0c;是提升工作效率的可选之路。 【2】官网教程 点击下方链接&#xf…

Python酷库之旅-第三方库Pandas(142)

目录 一、用法精讲 641、pandas.Timestamp.hour属性 641-1、语法 641-2、参数 641-3、功能 641-4、返回值 641-5、说明 641-6、用法 641-6-1、数据准备 641-6-2、代码示例 641-6-3、结果输出 642、pandas.Timestamp.is_leap_year属性 642-1、语法 642-2、参数 6…