C++列表实现

文章目录

  • 一、listView
    • 相关内容
    • 主要思想
    • 实例
    • 全部代码
  • 二、QTreeView

一、listView

相关内容

QAbstractItemModel:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel等都继承于此类;

QStringListModel:数据模型,储存一组字符串;

QList:列表类,以列表形态储存并管理其中的列表元素,并支持基于快速索引的数据存取,也可进行快速的数据删除操作;

QStringList:从QList继承而来,字符串列表类;

QListView:列表示图封装类,用来显示一维(一列)数据列表,二维数据列表可以用QTableView控件;
原文链接

主要思想

先把数据组织好保存到数字模型中,再将数据模型设置到列表视图控件中(树形控件也是如此)。

实例

以字符串列表操作为例:

  • 显示采用ListView控件;

  • 数据模型用QStringListModel;

我们首先要构造一个QStringListModel,这个数据模型最简单的方法就是采用现有的数据模型进行构造,我们进行如下操作;

要用到QStringListModel,需要包含头文件:

#include<QStringListModel>

在.h文件中添加我们需要的两个成员变量:

QStringListModel *model;
QStringList strlist;

在.cpp需要的位置添加:

model= new QStringListModel(this);
model->setStringList(strlist);
ui->listView->setModel(model);

全部代码

QtMainPage.cpp

#include "QtMainPage.h"
#include "ui_QtMainPage.h"

#include<QStringListModel>  //数据模型,储存一组字符串
//调试输出
#include <QDebug>

//防止中文乱码
#pragma execution_character_set("utf-8") 

QtMainPage::QtMainPage(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	//星号*是解引用运算符,用于获取指针指向的值
	//QListView *listView = new QListView(this);

	strlist << "第一行内容";
	strlist << "第二行内容";
	model = new QStringListModel(this);
	model->setStringList(strlist);
	ui.listView->setModel(model);
}

QtMainPage::~QtMainPage()
{}

QtMainPage.h

#pragma once

#include <QDialog>
#include "ui_QtMainPage.h"
#include<QStringListModel>  //数据模型,储存一组字符串

class QtMainPage : public QDialog
{
	//Qt宏,用于在类中启用Qt的信号和槽机制
	Q_OBJECT

//构造函数,
//接受一个指向QWidget的指针作为参数,
//该参数用于指定父窗口。如果未指定父窗口,则parent参数的默认值为nullptr
public:
	QtMainPage(QWidget *parent = nullptr);
	//析构函数。
	//当DlgLogin对象不再需要时,析构函数会被调用,以执行任何必要的清理操作
	~QtMainPage();

	//列表
private:
	QStringListModel *model;
	QStringList strlist;

	//存储和管理对话框窗口的界面元素
private:
	Ui::QtMainPageClass ui;
};

二、QTreeView

QTreeView实现了 model 中item的树形表示。这个类用于提供标准的层次列表
QTreeView类是model/view类之一,是Qt model/view框架的一部分。
QTreeView实现了由QAbstractItemView类定义的接口,以允许它显示由QAbstractItemModel类派生的模型提供的数据
QtMainPage.cpp

#include "QtMainPage.h"
#include "ui_QtMainPage.h"

#include<QStringListModel>  //数据模型,储存一组字符串

//treeview依赖
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>

//调试输出
#include <QDebug>

//防止中文乱码
#pragma execution_character_set("utf-8") 

QtMainPage::QtMainPage(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	//星号*是解引用运算符,用于获取指针指向的值
	//QListView *listView = new QListView(this);

	//listview的
	strlist << "第一行内容";
	strlist << "第二行内容";
	model = new QStringListModel(this);
	model->setStringList(strlist);
	ui.listView->setModel(model);

	//treeview
	//视图
	QTreeView  *treeView = new QTreeView;
	//模型
	QStandardItemModel *standardItemModel = new QStandardItemModel;

	//设置列表标题
	standardItemModel->setHorizontalHeaderLabels({"序号","测试事件","电流1/mA","系统时间1", "电流2/mA","系统时间2", "电流3/mA" });
	
	//设置页面标题 如果是单独打开一个列表信息的时候可以在这里设置
	//treeView->setWindowTitle("电池测试数据");
	
	//设置顶层节点
	//第一行(索引为0)设置了一个内容为“第一层数据”的模型顶级项
	standardItemModel->setItem(0, new QStandardItem("第一层数据"));
	standardItemModel->setItem(1,0, new QStandardItem("第二层数据"));

	//设置第一行
	//以下为设置第一个顶层节点(索引为(0, 0 或 0))的子项
	//第一个顶层节点的第一个位置(子项索引为(0, 0)的位置创建了新的QStandardItem,内容为“1”
	//standardItemModel->item(0) 表示内容添加在哪一个顶层节点
	//setChild(0, 0, new QStandardItem("1"));
	//0, 0表示设置子项在几行几列( 0, 0表示设置内容在一行一列)
	//new QStandardItem("1")表示新建一个内容为1的item
	/*拆分写法
	 QStandardItem* root1 = new QStandardItem("第一层数据");
	 QStandardItem* sub11 = new QStandardItem("1");
	 QStandardItem* sub12 = new QStandardItem("0");
     QStandardItem* sub13 = new QStandardItem("0");
	 root1->setChild(0, 0, sub11);
	 root1->setChild(0, 1, sub12);
	 root1->setChild(0,2, sub13);
	 model->setItem(0, root1);
	*/
	standardItemModel->item(0)->setChild(0, 0, new QStandardItem("1"));
	standardItemModel->item(0, 0)->setChild(0, 1, new QStandardItem("0"));
	standardItemModel->item(0, 0)->setChild(0, 2, new QStandardItem("0"));
	standardItemModel->item(0, 0)->setChild(0, 3, new QStandardItem("2024-04-25 10:36:20,780"));
	standardItemModel->item(0, 0)->setChild(0, 4, new QStandardItem("无"));
	standardItemModel->item(0, 0)->setChild(0, 5, new QStandardItem("答复"));
	standardItemModel->item(0, 0)->setChild(0, 6, new QStandardItem("无"));

	//设置第二行
	//第一个顶层节点的第二个位置(子项索引为(1, 0)的位置创建了新的QStandardItem,内容为“2”
	standardItemModel->item(0, 0)->setChild(1, 0, new QStandardItem("2"));
	standardItemModel->item(0, 0)->setChild(1, 1, new QStandardItem("0254"));
	standardItemModel->item(0, 0)->setChild(1, 2, new QStandardItem("543"));
	standardItemModel->item(0, 0)->setChild(1, 3, new QStandardItem("2024-04-25 10:36:20,740"));
	standardItemModel->item(0, 0)->setChild(1, 4, new QStandardItem("问题"));
	standardItemModel->item(0, 0)->setChild(1, 5, new QStandardItem("无"));
	standardItemModel->item(0, 0)->setChild(1, 6, new QStandardItem("无"));

	//设置第三行
	standardItemModel->item(0, 0)->setChild(2, 0, new QStandardItem("3"));
	standardItemModel->item(0, 0)->setChild(2, 1, new QStandardItem("0"));
	standardItemModel->item(0, 0)->setChild(2, 2, new QStandardItem("0"));
	standardItemModel->item(0, 0)->setChild(2, 3, new QStandardItem("2024-04-25 10:36:20,434"));
	standardItemModel->item(0, 0)->setChild(2, 4, new QStandardItem("无"));
	standardItemModel->item(0, 0)->setChild(2, 5, new QStandardItem("暂时"));
	standardItemModel->item(0, 0)->setChild(2, 6, new QStandardItem("无"));

	//以下为设置第二个顶层节点(索引为(1, 0 或 0))
	standardItemModel->item(1, 0)->setChild(0, 0, new QStandardItem("1"));
	standardItemModel->item(1, 0)->setChild(0, 1, new QStandardItem("0"));
	standardItemModel->item(1, 0)->setChild(0, 2, new QStandardItem("0"));
	standardItemModel->item(1, 0)->setChild(0, 3, new QStandardItem("2024-04-25 10:36:20,780"));
	standardItemModel->item(1, 0)->setChild(0, 4, new QStandardItem("无"));
	standardItemModel->item(1, 0)->setChild(0, 5, new QStandardItem("答复"));
	standardItemModel->item(1, 0)->setChild(0, 6, new QStandardItem("无"));
	//把模型设置到视图
	ui.treeView->setModel(standardItemModel);
	// 单独窗口显示视图
	//treeView->setModel(standardItemModel);
	//treeView->show();

	// 加到布局
	//ui.verticalLayout->addWidget(treeView);
}

QtMainPage::~QtMainPage()
{}

效果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(实测验证)Gitee代码托管尝试(一)——克隆/下载

一、登录 Gitee&#xff08;码云&#xff09;代码托管平台&#xff1a; Gitee - 基于 Git 的代码托管和研发协作平台 新建个人账户如下&#xff1a; 二、SSH 公钥设置 1、在git安装目录打开“git-cmd.exe”; 2、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen …

社区服务用工具建立与居民的强关系

在数字化时代的浪潮下&#xff0c;社区服务不再局限于传统的面对面交流模式&#xff0c;而是借助互联网医疗健康服务应用&#xff0c;尤其是智慧康养服务平台&#xff0c;构建起了与居民之间更为紧密、便捷的联系。这种新型的社区服务模式&#xff0c;不仅提升了服务效率&#…

PDK安装及简介

目录 PDK简介 pdk安装 Standard Cell Library简介 IO Library简介 PDK简介 PDK&#xff1a;全称Process Design Kit&#xff0c;是工艺设计工具包的缩写&#xff0c;是制造和设计之间的沟通桥梁&#xff0c;是模拟电路设计的起始点。 具体来说&#xff0c;PDK是代工厂(FAB…

webhook 和 API:你了解吗

Webhooks 是许多 API 的补充。通过设置 webhook 系统&#xff0c;系统 B 可以注册接收有关系统 A 某些更改的通知。当更改发生时&#xff0c;系统 A 推送 更改到系统 B&#xff0c;通常是以发出 HTTP POST 请求的形式。 Webhooks 旨在消除或减少不断轮询数据的需要。但根据我的…

【Axure原型分享】动态伸缩组织架构图

今天和大家分享动态伸缩组织架构图图原型模板&#xff0c;我们可以通过点击加减按钮来展开或收起子内容&#xff0c;具体效果可以点击下方视频观看或者打开预览地址来体验 【原型效果】 【Axure高保真原型】动态伸缩组织架构图 【原型预览含下载地址】 https://axhub.im/ax9/…

AI大模型探索之路-训练篇23:ChatGLM3微调实战-基于P-Tuning V2技术的实践指南

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

【计算机毕业设计】springboot成都奥科厨具厂产品在线销售系统设计与实现

时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;成都奥科厨具厂产品在线销售系统当然不能排除在外。成都奥科厨具厂产品在线销售系统是在实际应用和 软件工程的开发原理之上&#xff0c;运用jav…

《网探》:网络安全,你不得不学的知识。

有没有一些亲戚朋友联系过你&#xff0c;让你和他们一起参与某一项投资&#xff1f; 他们会告诉你&#xff0c;只要投入少部分钱就可以成为会员&#xff0c;今后每个月参与分红&#xff0c;投资的钱越多&#xff0c;分红越多。 而且要是你能成功带一定数量的人加入他们&#…

代码+视频,R言语处理数据中的缺失值

在SCI论文中&#xff0c;我们不可避免和缺失数据打交道&#xff0c;特别是在回顾性研究&#xff0c;对于缺失的协变量&#xff08;就是混杂因素&#xff09;&#xff0c;我们可以使用插补补齐数据&#xff0c;但是对于结局变量和原因变量的缺失&#xff0c;我们不能这么做。部分…

网络审计:为什么定期检查您的网络很重要

在数字化时代&#xff0c;网络安全成为组织和个人必须面对的重要挑战。网络审计是一种关键的安全措施&#xff0c;通过定期检查和评估网络系统的安全性&#xff0c;帮助发现潜在的安全漏洞和弱点&#xff0c;从而防止数据泄露和其他安全威胁。本文将介绍网络审计的重要性&#…

不干人事的表达式:(void)0

assert是C语言的一个宏。在<assert.h>中可以找到它的定义&#xff1a; #ifdef NDEBUG#define assert(_Expression) ((void)0) #else /* !defined (NDEBUG) */// 省略... #endif /* !defined (NDEBUG) */ 其用法在“捕捉错误的assert”一文中已有说明。 决定assert是否…

【计算机毕业设计】springboot超市在线销售系统的设计与实现

当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c; 计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统超市在线销售采取了人工的管理方法&#xff0c…

sqlite3命令行工具无法退出问题处理

一、背景&#xff1a; 软件使用的后台数据库为sqlite&#xff0c;linux主机系统层面使用sqlite3命令行工具登录数据库后&#xff0c;无法执行sql脚本&#xff0c;无法退出sqlite3。无法执行ctrlc&#xff0c;执行ctrlz后sqlite3前台进程被中断&#xff0c;但是该进程没有退出。…

PADS:生成自交叉平面区域

根据板外形铺铜方法&#xff1a; pads根据板外形铺铜_铺铜如何根据板子形状改变-CSDN博客 根据板外形创建平面区域出现问题&#xff1a; 解决方法&#xff1a;去找结构&#xff0c;让他把出图之前把线合并了

笔记3:torch训练测试VGG网络

&#xff08;1&#xff09;利用Netron查看网络实际情况 上图链接 python生成上图代码如下&#xff0c;其中GETVGGnet是搭建VGG网络的程序GETVGGnet.py&#xff0c;VGGnet是该程序中的搭建网络类。netron是需要pip安装的可视化库&#xff0c;注意do_constant_foldingFalse可以防…

26 分钟惊讶世界,GPT-4o 引领未来人机交互

前言 原文链接&#xff1a;OpenAI最新模型——GPT-4o&#xff0c;实时语音视频交互&#xff0c;未来人机交互近在眼前 - Kaiho小站 北京时间 5 月 14 日凌晨&#xff0c;OpenAI 发布新一代模型——GPT-4o&#xff0c;仅在 ChatGPT 面世 17 个月后&#xff0c;OpenAI 再次通过…

掌握这些神器,让你的编程之路更加“丝滑”

前言&#xff1a; 在软件开发的旅程中&#xff0c;程序员的实用神器确实如同指南针&#xff0c;帮助他们在复杂的代码海洋中导航。以下是从三个方向——自动化测试工具、持续集成/持续部署&#xff08;CI/CD&#xff09;以及代码审查与质量分析——来探讨这些实用神器的应用和影…

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…

机器学习(3)

目录 3-1线性回归 3-2最小二乘解 3-3多元线性回归 3-4广义线性模型 3-5对率回归 3-6对率回归求解 3-7线性判别分析 3-8LDA的多类推广 3-9多分类学习基本思路 3-10类别不平衡 3-1线性回归 线性模型为什么重要&#xff1f; 人类在考虑问题时&#xff0c;通常…