Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别

news2025/8/2 20:32:55

Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别


目录

  • Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别
      • 1、简介
      • 2、使用示例
        • 1、QListView
        • 2、QTableView
        • 3、QListWidget
        • 4、QTableWidget


1、简介

QListView、QListWidget是列表形式展示的控件。

QTableView、QTableWidget是表格形式展示控件。

继承关系:带Widget的继承自View,即:QListWidget是继承QListView,QTableWidget继承自QTableView。

区别:QListView是基于Model,而QListWidget基于Item。这是它们的本质区别。QTableView、QTableWidget同理。

由于QListView和QTableView是基于model的,需要自己来建模(例如建立QStringListModel、QSqlTableModel等),保存数据,这样就大大降低了数据冗余,提高了程序的效率,以及能更方便的进行我们自己需要展示的内容,但是需要我们对数据建模有一定了解。

而QListWidget相当于是QListView的升级版,它已经自己为我们建立了一个数据存储模型(QListWidgetItem),操作方便,直接调用addItem即可添加项目(ICON,文字)。QTableView、QTableWidget同理。


2、使用示例

1、QListView

向QListView中添加条目需借助QAbstractListModel,这里我使用字符串列表模型(QStringListModel)进行示例。

    // 设置string模型
    QStringListModel* strListModel = new QStringListModel(this);
    ui->listView->setModel(strListModel);

    // 设置选中模式为扩展模式,即可多选也可单选
    ui->listView->setSelectionMode(QListView::ExtendedSelection);

    // 设置显示
    QStringList strList = {"listview1", "listview2", "listview3"};
    qobject_cast<QStringListModel*>(ui->listView->model())->setStringList(strList);

    // 如果内容有变化需要更新显示,就重新setStringList
    strList.append("listview4");
    qobject_cast<QStringListModel*>(ui->listView->model())->setStringList(strList);

    // 获取QListView当前的列表内容:首先需要获得QListView的model,通过model获取StringList
    QStringListModel* m = qobject_cast<QStringListModel*>(ui->listView->model());
    QStringList items = m->stringList();

效果图:

2、QTableView

见博客:https://blog.csdn.net/qq153471503/article/details/123423931

3、QListWidget

QListWidget使用起来更简单,直接使用addItem添加即可。

    // 设置选中模式
    ui->listWidget->setSelectionMode(QListWidget::ExtendedSelection);

    // 添加一项
    ui->listWidget->addItem("listwidget1");

    // 添加一项(带图标)
    ui->listWidget->addItem(new QListWidgetItem(QIcon(QPixmap(100, 100)), "listwidget2"));

效果图:

QListWidget添加条目比较简单,但是删除需要额外注意!

QListWidget提供了两个函数:removeItemWidgettakeItem,两者的区别:

  • removeItemWidget:只是删除该item对应的widget,不会删除该item,如果这个item存在内容还是会保留显示
  • takeitem直接删除该item
  • clear函数清除所有的item

所以,如果想真正的删除一项,需要使用takeitem。

在使用takeitem时有两点需要注意:

  • 该函数执行成功会返回一个QListWidgetItem对象,并且需要手动的delete,若执行失败则返回nullptr
  • 每成功的执行一次takeitem,列表内容的索引都会重新更新。

以下示例为删除选中的item:

    while(true)  // 循环删除单个就是多删除
    {
        // 当前选中项的index
        QModelIndexList l = ui->listWidget->selectionModel()->selectedIndexes();

        if(l.isEmpty())
            break;

        // 从QListWidget中删除item
        QListWidgetItem* item = ui->listWidget->takeItem(l[0].row());

        // 必须释放item
        delete item;
    }

4、QTableWidget

    // 设置水平拉伸显示,这样比较好看
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    // 设置行数
    ui->tableWidget->setRowCount(3);

    // 设置列数
    ui->tableWidget->setColumnCount(3);

    // 设置垂直表头
    ui->tableWidget->setVerticalHeaderLabels({"1月", "2月", "3月"});

    // 设置水平表头
    ui->tableWidget->setHorizontalHeaderLabels({"班级一", "班级二", "班级三"});

效果:

添加数据:

    // 设置数据
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("item11"));
    ui->tableWidget->setItem(1, 0, new QTableWidgetItem("item21"));

    // 设置数据
    QTableWidgetItem* item = new QTableWidgetItem("item12");
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);  // 居中显示
    item->setFlags(Qt::ItemIsEnabled);  // 设置为不可编辑
    ui->tableWidget->setItem(0, 1, item);

效果:

将单元格设置成QComboBox,使单元格支持下拉选择:

    // 将单元格设置成QComboBox
    QComboBox* comboBox = new QComboBox();
    comboBox->addItems({"abc", "def"});
    ui->tableWidget->setCellWidget(0, 2, comboBox);

效果:

修改单元格内容:

    // 修改数据,修改前注意要检查修改的这个单元格有没有item
    QTableWidgetItem* channgeItem = ui->tableWidget->item(0, 0);
    if(channgeItem)
    {
        channgeItem->setText(channgeItem->text() + "-channged");
    }

获取单元格内容:

    // 获取普通单元格的数据
    qDebug() << ui->tableWidget->item(0, 0)->text();

    // 获取QComboBox单元格的数据
    qDebug() << qobject_cast<QComboBox*>(ui->tableWidget->cellWidget(0, 2))->currentText();

删除单元格内容:

    // 删除单元格
    QTableWidgetItem* deleteItem = ui->tableWidget->takeItem(0, 0);
    if(deleteItem)
    {
        delete  deleteItem;
    }

ends…

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

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

相关文章

Maven安装配置

Maven安装配置 第一步 : 解压 解压 apache-maven-3.6.1.rar 既安装完成 解压缩后的目录结构如下&#xff1a; bin目录 &#xff1a; 存放的是可执行命令。mvn 命令重点关注。conf目录 &#xff1a;存放Maven的配置文件。settings.xml 配置文件后期需要修改。lib目录 &#xf…

基于DPDK(x86平台)应用性能优化实践

产生性能瓶颈有多方面的原因&#xff0c;包括硬件&#xff08;自身能力限制或BIOS设置不当&#xff09;、操作系统&#xff08;某些feature没打开&#xff09;和软件。软件方面的性能瓶颈主要是由于编码不当导致&#xff0c;常见原因有以下几种&#xff1a; 数据结构cache lin…

【多线程】读写锁ReentrantReadWriteLock源码分析

【多线程】读写锁ReentrantReadWriteLock源码分析&#xff08;一&#xff09;读写锁ReentrantReadWriteLock源码分析【1】类图结构和参数【2】写锁的获取和释放&#xff08;1&#xff09;lock方法&#xff08;2&#xff09;lockInterruptibly方法&#xff08;3&#xff09;tryL…

GPS+北斗定位借助Arduino的数值显示

GPS北斗定位借助Arduino的数值显示 一、前言二、硬件要求三、参数基础四、原理剖析五、使用方式六、程序概要七、成果展示八、数据解析九、总结一、前言 较多的导航软件在生活中层出不穷&#xff0c;但是卫星定位同样也适用于轨迹记录、经纬分析、授时系统等&#xff0c;多样的…

【杰理AC696X】外挂FLASH音乐播放及Bin文件制作

外挂FLASH音乐播放及Bin文件制作 测试SDK版本&#xff1a;《ac696n_soundbox_sdk_v1.6.0》 文章目录外挂FLASH音乐播放及Bin文件制作前言一、板级配置1.1 SPI配置1.2 FLASH配置二、FLASH音乐播放测试三、FLASH BIN文件制作1.1 FLASHPCWinHex1.2 U盘分区工具WinHex1.3 FLASHPCF…

嵌入式单片机智能药盒设计(含代码)

目录 前言 设计的内容 &#xff08;1&#xff09;显示 &#xff08;2&#xff09;定时时间与用药量的设定 &#xff08;3&#xff09;实时时间调节 &#xff08;4&#xff09;报警功能 时钟模块 蓝牙模块 系统软件设计 系统主程序 按键函数 中断服务函数 作品展示 测试药…

2023年天津农学院专升本专业课参考教材

2023年天津农学院高职升本科专业课参考教材一、人力资源管理专业 1、《人力资源管理实用教程》 (第2版)&#xff0c;吴宝华&#xff0c;北京大学出版社 2、《人力资源管理》&#xff08;第4版&#xff09;&#xff0c;刘昕&#xff0c;中国人民大学出版社 3、《人力资源管理概论…

kobject 与sysfs属性文件读写

kobject和kset的简单总结 • kobject是struct kobject类型的对象。Kobject 有一个名字和一个引用计数。kobject 也有一个父指针&#xff08;允许 kobjects 被安排到层次结构中&#xff09;&#xff0c;一个特定的类型&#xff0c;也许还有一个在 sysfs 虚拟文件系统中的表示。…

OceanBase 4.0 解读:分布式查询性能提升,我们是如何思考的?

关于作者 王国平 OceanBase高级技术专家 目前OceanBase SQL引擎的技术负责人。2016年加入 OceanBase&#xff0c;负责SQL引擎的研发工作。2008年毕业于哈尔滨工业大学&#xff0c;2014年在新加坡国立大学获得博士学位&#xff0c;博士期间主要研究方向是数据库领域的(多)查询…

C++入门(2)-类与对象

类与对象初步认识类与对象一、面向过程与面向对象的区别二、类与结构体三、类的定义四、类的实例化五、类对象六、this指针七、构造函数八、析构函数九、拷贝构造函数十、运算符重载函数初步认识类与对象 一、面向过程与面向对象的区别 C语言是面向过程进行编程&#xff0c;注…

springboot整合其他项目

目录 一&#xff0c;集成Druid 学习地址&#xff1a; 主要讲监控 基于springboot视图渲染技术上增加代码 1.1 增加pom依赖 1.2 先在application.yml中添加Druid的数据源 1.3 其次在全局配置文件application.yml中添加所需的配置 配置截图&#xff1a; 配置解析 1.4 启动…

电脑录屏快捷键是什么?win10自带屏幕录制在哪

​在使用电脑的过程中&#xff0c;我们难免会遇到使用电脑录屏功能。有时候可能是想录制网课&#xff0c;有时候可能是想录制游戏的精彩操作&#xff0c;有时候可能只是想录制会议内容。 电脑录屏能够将重要的画面内容进行录制&#xff0c;十分的方便。但也有很多的小伙伴不清…

Python基础(三):PyCharm安装和使用

文章目录 PyCharm安装和使用 一、PyCharm的作用 二、PyCharm系统要求 三、下载和安装 四、PyCharm基本使用 五、PyCharm的基本设置 1、修改主题 2、修改代码文字格式 3、修改解释器 4、项目管理 PyCharm安装和使用 14天学习训练营导师课程&#xff1a;杨鑫《Python…

一、VSCode——免安装

介绍 Visual Studio Code支持可移植模式。此模式使 VS Code 创建和维护的所有数据都位于自身附近&#xff0c;因此可以跨环境移动。 此模式还提供了设置 VS Code 扩展的安装文件夹位置的方法&#xff0c;这对于阻止在 Windows AppData 文件夹中安装扩展的企业环境非常有用。 …

极市打榜|70G+已标注数据集出炉,油品泄露识别等全新算法上线!

极市打榜 算法打榜是极市平台推出的一种算法项目合作模式&#xff0c;至今已上线 100 产业端落地算法项目&#xff0c;已对接智慧城市、智慧工地、明厨亮灶等多个行业真实需求&#xff0c;算法方向涵盖目标检测、行为识别、图像分割、视频理解、目标跟踪、OCR等。 开发者报名…

CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器

CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器 CAN是最新进的现场总线,灵活性好,通讯可靠性高,抗干扰能力强&#xff0c;超长通信距离等优点,110个节点,兼带CAN-FD功能产品,容错电压可达-70V~ 70V,温度范围高达-40C ~ 150C最初应用于汽车电子,目前已广…

安信可Ai-WB1系列AT指令连接MQTT阿里云物联网平台

文章目录前言1 准备材料2 创建云端设备3 硬件连接4 配置终端设备5 MQTT实现发布&订阅消息联系我们前言 本文将介绍安信可AI-WB1系列通过AT指令接入阿里云物联网平台&#xff0c;实现MQTT的订阅和发布。 1 准备材料 AI-WB1系列模组或者开发板USB转TTL模块/Type-C数据线阿…

数仓建设教程

50000字&#xff0c;数仓建设保姆级教程&#xff0c;离线和实时一网打尽(理论实战) 上 - 腾讯云开发者社区-腾讯云 (tencent.com)50000字&#xff0c;数仓建设保姆级教程&#xff0c;离线和实时一网打尽(理论实战) 下_五分钟学大数据的技术博客_51CTO博客#yyds干货盘点#最强最全…

什么是DDoS攻击?企业服务器是否需要DDoS防御

有时候你可能会遇到某个网站突然打不开&#xff0c;这一段时间后发布自己被DDos攻击的公告&#xff0c; 那么&#xff0c;为什么DDOS攻击能让服务器瘫痪&#xff1f;黑客又如何执行DDos攻击的呢&#xff1f; DDoS全称为Distributed Denial of Service&#xff08;分布式拒绝服…

Anemoi hash:一种SNARK-friendly的哈希函数

随着zk的兴起&#xff0c;出现了一大批zk友好且面向算术化(Arithmetization-Oriented)的哈希函数&#xff0c;如MiMC-Hash, Rescue–Prime, Poseidon等等&#xff0c;本文要介绍的Anemoi是今年新出的一种zk友好且面向算术化的哈希函数&#xff0c;与其他哈希函数相比&#xff0…