【QT学习十】QListView

2024-01-12 18:52
文章标签 学习 qt qlistview

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

这篇关于【QT学习十】QListView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598843

相关文章

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho