【QT学习十】QListView

目录

一、QListView 概述

二、QListView 的主要特性包括:

三、基本用法

1、创建及基本属性设置

2、添加显示的值

3、获取ListView中的内容

4、列表模式和图标模式之间切换

5、自定义

四、提高性能

五、总结


一、QListView 概述

        QListView 是一个用于显示列表数据的控件,它提供了灵活的视图模型以及对列表项的高度自定义的能力。

        1、QListView 是Qt中的一个视图类,用于展示模型中的数据。它基于QAbstractItemView,支持多种视图模式,包括列表视图(List View)、图标视图(Icon View)、详细信息视图(Detail View)等。

        2、QListView 类是Qt中模型/视图框架的一部分,通常与QStandardItemModel或从QAbstractItemModel派生的自定义模型一起使用。

二、QListView 的主要特性包括:

  1. 模型-视图架构: 遵循模型-视图架构,其中数据存储在模型中,而视图负责呈现该数据。

  2. 灵活的显示模式: QListView 支持不同的显示模式,包括列表视图(基于文本)和图标视图(基于图标),这种灵活性允许选择最适合的呈现方式。

  3. 自定义: 可以通过使用委托(delegates)自定义视图中项的外观,委托控制数据的渲染和编辑方式。

  4. 项目布局: 项目可以按照从上到下或者从左到右等方向进行布局,可以是固定的,也可以允许移动。视图的flow()和movement()属性控制这些行为。

  5. 选择处理: 提供了处理项目选择的机制,允许用户与显示的数据进行交互。

三、基本用法

1、创建及基本属性设置

    m_listView->setSelectionMode(QAbstractItemView::SingleSelection);m_listView->setEditTriggers(QAbstractItemView::NoEditTriggers);m_listView->setFocusPolicy(Qt::NoFocus);

这段代码设置了 QListView 的一些属性,定制了其行为:

  1. setSelectionMode(QAbstractItemView::SingleSelection):设置选择模式为单选模式,即只能选择一个项目。

  2. setEditTriggers(QAbstractItemView::NoEditTriggers):设置编辑触发器为不可编辑,禁止编辑项目。

  3. setFocusPolicy(Qt::NoFocus):设置焦点策略为 Qt::NoFocus,禁止该视图接受焦点。

2、添加显示的值

    // 创建QStandardItemModel作为数据模型QStandardItemModel *model = new QStandardItemModel(m_listView);// 向模型添加数据项for (int i = 0; i < 10; ++i) {QStandardItem *item = new QStandardItem(QString("Item %1").arg(i));// 显示复选框item->setCheckable(true);// 设置复选框状态item->setCheckState(Qt::Unchecked);model->appendRow(item);}// 将模型设置给QListViewm_listView->setModel(model);

3、获取ListView中的内容

    QAbstractItemModel* model = m_listView->model();QModelIndexList indexes;for (int var = 0; var < model->rowCount(); ++var) {QModelIndex index = model->index(var,0);indexes.append(index);}for(const QModelIndex &index :indexes){QVariant value = model->data(index,Qt::CheckStateRole);if(value.isValid() && value.toInt() == Qt::Checked){QVariant val = model->data(index,Qt::DisplayRole);qDebug() << val.toString();}}

        这段代码通过遍历 QListView 的模型中的所有行,获取每行第一列的索引,并检查该行是否处于选中状态(Qt::Checked)。如果是选中状态,就获取该行的显示数据并输出。

4、列表模式和图标模式之间切换

   // 创建一个按钮用于切换显示模式QPushButton *toggleButton = new QPushButton("Toggle View Mode");// 连接按钮点击事件,切换QListView的显示模式QObject::connect(toggleButton, &QPushButton::clicked, [&]() {if (m_listView->viewMode() == QListView::ListMode) {m_listView->setViewMode(QListView::IconMode);// 设置图标大小m_listView->setGridSize(QSize(50, 50));  } else {m_listView->setViewMode(QListView::ListMode);}});// 布局管理QBoxLayout *box = new QBoxLayout(QBoxLayout::TopToBottom);box->setContentsMargins(0,0,0,0);box->setSpacing(0);box->addWidget(toggleButton);box->addWidget(m_listView);

5、自定义

        允许通过委托(delegates)自定义项目的外观和交互方式。

class CustomDelegate : public QStyledItemDelegate {
public:void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override {// 获取项目的文本内容QString text = index.data(Qt::DisplayRole).toString();// 设置不同的颜色和字体painter->save();if (index.row() % 2 == 0) {painter->setPen(Qt::blue);painter->setFont(QFont("Arial", 12, QFont::Bold));} else {painter->setPen(Qt::green);painter->setFont(QFont("Times", 14, QFont::Light));}// 绘制文本painter->drawText(option.rect, Qt::AlignCenter, text);painter->restore();}
};// 使用自定义委托CustomDelegate *customDelegate = new CustomDelegate;m_listView->setItemDelegate(customDelegate);

        在这个例子中,我们创建了一个自定义的委托类 CustomDelegate 继承自 QStyledItemDelegate。在 paint 函数中,我们根据项目的行数(偶数或奇数)设置了不同的颜色和字体,然后使用 QPainter 绘制了文本。

四、提高性能

        为了在显示大量项目时提高性能,可以向视图提供有关其处理的数据的提示。对于预计显示具有相等大小的项目的视图,可以采取的一种方法是将uniformItemSizes属性设置为true。

五、总结

        QListView 是Qt中一个强大的列表显示控件,它的强大之处在于其适用于多种数据展示需求,并提供了许多可定制的选项。通过选择合适的模型、设置不同的视图模式以及调整布局参数,可以创建出适用于不同场景的用户界面。

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

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

相关文章

【算法分析与设计】最大子数组和

题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&a…

讯飞智文利用人工智能技术帮助用户快速生成Word和PPT文档

网址 https://zhiwen.xfyun.cn/ 讯飞智文是一个由科大讯飞股份有限公司提供的在线服务&#xff0c;它利用人工智能技术帮助用户快速生成Word文档和PPT演示文稿。这个平台的特点包括&#xff1a; 一键生成文档&#xff1a;用户可以通过输入一句话主题或长文本&#xff0c;快速…

硬核加码!星邦蓝助力全球运力最大固体火箭“引力一号”海上首飞

继助力我国最大固体运载火箭“力箭一号”首飞后&#xff0c;星邦蓝再次有幸参与和见证了全球运力最大的固体火箭“引力一号”首次成功发射。 今日&#xff0c;全球运力最大的固体火箭“引力一号”从山东海阳附近海域完成首次发射&#xff0c;刷新世界最大固体运载火箭纪录&…

2024年抖音小店,三大运营趋势,新手商家注意了!

大家好&#xff0c;我是电商糖果 每年都有大量的商家入驻抖音小店&#xff0c;小店的运营趋势每年也都会有变化。 2024年抖音小店依旧是平台重点扶持的项目&#xff0c;所以&#xff0c;今年依旧有大量的商家想要入驻。 这篇文章糖果就给大家总结了2024年&#xff0c;抖音小…

关于鸿蒙的ArkUI的自我理解

先不说好不好上手 一些软件必要的基础概念了解 ①瓦片地图 --无或未找到 ②视频播放功能 --未找到能播放直播流&#xff08;找到个 ohos/ijkplayer不知如何&#xff09; ③支付功能 微信无 支付宝的是java代码写得&#xff0c;AskUI中如何调用 ④推送 --自己应该有吧 ⑤长…

【一周安全资讯0106】国家标准《信息安全技术 网络安全信息报送指南》正式发布;全球1100万SSH服务器面临“水龟攻击”威胁

要闻速览 1、国家标准GB/T 43557-2023《信息安全技术 网络安全信息报送指南》发布 2、《未成年人网络保护条例》元旦起施行 织密未成年人网络保护立体“安全网” 3、深圳证监局&#xff1a;证券期货经营机构应建立健全网络安全应急处置机制 4、黑客大规模恶意注册与ChatGPT相似…

CKS考试心得

考前须知&#xff1a; 1、一共16题&#xff0c;100分66分及格&#xff0c;考试有两次机会 考试准备&#xff1a; 1、护照或或者包含英文名字证件 2、要选择工作日的早上或者晚上考试&#xff0c;千万不要选择周末去考&#xff0c;否则卡到怀疑人生&#xff0c;影响考试结果…

全面解析微服务

导读 微服务是企业应用及数据变革升级的利器&#xff0c;也是数字化转型及运营不可或缺的助产工具&#xff0c;企业云原生更离不开微服务&#xff0c;同时云原生的既要最大化发挥微服务的价值&#xff0c;也要最大化弥补微服务的缺陷。本文梳理了微服务基础设施组件、服务网格、…

C++重新认知:拷贝构造函数

一、什么是拷贝构造函数 对于简单变量来说&#xff0c;可以轻松完成拷贝。 int a 10; int b a;但是对于复杂的类对象来说&#xff0c;不仅存在变量成员&#xff0c;也存在各种函数等。因此相同类型的类对象是通过拷贝构造函数来完成复制过程的。 #include<iostream>…

基于 TensorFlow.js 构建垃圾评论检测系统

基于 TensorFlow.js 构建垃圾评论检测系统。 准备工作 在过去的十年中,Web 应用变得越来越具有社交性和互动性,而即使是在中等热门的网站上,也有数万人可能实时对多媒体、评论等的支持。这也让垃圾内容发布者有机会滥用此类系统,将不太令人满意的内容与其他人撰写的文章、视…

小程序必看系列!什么是抖音小程序?抖音小程序怎么制作?

随着移动互联网的飞速发展&#xff0c;抖音已经成为了一个广受欢迎的短视频平台。在这个平台上&#xff0c;用户可以分享自己的生活点滴、表达自己的观点&#xff0c;甚至还能通过小程序来丰富自己的社交体验。那么&#xff0c;如何制作抖音小程序呢&#xff1f; 一、抖音小程…

5288 SDH/PDH数字传输分析仪

5288 SDH/PDH数字传输分析仪 数字通信测量仪器 5288 SDH/PDH数字传输分析仪为高性能手持式数字传输分析仪&#xff0c;符合ITU-T SDH/PDH技术规范和我国光同步传输网技术体制的规定,支持2.048、34.368、139.264Mb/s及155.520Mb/s传输速率的测试。可进行SDH/PDH传输设备和网络的…

云畅科技技术中心被认定为湖南省省级企业技术中心

近日&#xff0c;湖南省工业和信息化厅公布《2023年第二批湖南省省级企业技术中心(第29批)》&#xff0c;云畅科技技术中心作为研发设计型代表入选。 省级企业技术中心是强化企业技术创新主体地位&#xff0c;增强企业自主创新能力&#xff0c;推动工业企业高质量发展的一个重要…

Vue-插槽(Slots)

1. 介绍 在Vue.js中&#xff0c;插槽是一种强大的功能&#xff0c;它允许你创建可重用的模板&#xff0c;并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式&#xff0c;可以在父组件中定义一些“插槽”&#xff0c;然后在子组件中使用这些插槽&#xff0c;插…

SQL-分组查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

turnjs实现翻书效果

需求&#xff1a;要做一个效果&#xff0c;类似于阅读器上的翻书效果。 咱们要实现这个需求就需要使用turnjs这个插件&#xff0c;他的官网是turnjs官网。 进入官网后可以点击 这个按钮去下载官网的demo。 这个插件依赖于jQuery&#xff0c;所以你的先安装jQuery. npm insta…

面试官:实际工作中哪里用到了自定义注解?

自定义注解可以标记在方法上或类上&#xff0c;用于在编译期或运行期进行特定的业务功能处理。在 Java 中&#xff0c;自定义注解使用 interface 关键字来定义&#xff0c;它可以实现如&#xff1a;日志记录、性能监控、权限校验等功能。 在 Spring Boot 中实现一个自定义注解&…

Unity URP下阴影锯齿

1.概述 在Unity开发的URP项目中出现阴影有明显锯齿。如下图所示&#xff1a; 并且在主光源的Shadow Type已经是Soft Shadows模式了。 2.URP Asset 阴影出现锯齿说明阴影质量不高&#xff0c;所以要先找到URP Asset文件进行阴影质量参数的设置。 1.打开PlayerSetting找到Graph…

代码签名证书怎么选择?软件开发者必看

随着互联网的高速发展&#xff0c;各种购物、资讯、社交类软件高速增长。而对于软件开发者来说&#xff0c;选择合适的代码签名证书来为软件进行数字签名、确保软件程序代码的完整性和软件的可信任性是很有必要的。但市场上有多种品牌、多种类型的代码签名证书可以选择&#xf…

03.阿里Java开发手册——OOP规约

【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法&#xff0c;无谓增加编译器解析成本&#xff0c;直接用类名来访问即可。 【强制】所有的覆写方法&#xff0c;必须加Override 注解。 说明&#xff1a;getObject()与 get0bject()的问题。一个是字母的 O&#x…