C++列表实现

news2024/12/27 13:13:00

文章目录

  • 一、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()
{}

效果
在这里插入图片描述

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

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

相关文章

第一个fyne应用

第一个fyne应用 由于在写一个milvus的图形化工具&#xff0c;方便客户端使用&#xff0c;调研了一下只有这fyne的go-gui的star最多&#xff0c;比较流行&#xff0c;因此打算使用这个框架来进行milvus的工具开发。 第一个fyne应用 依赖go.mod: module fynedemogo 1.20requi…

BGP学习三:BGP路由优选12条规则,闪亮登场啦啦啦啦啦

目录 一.BGP策略工具 &#xff08;1&#xff09;Router-policy作用 &#xff08;2&#xff09;组成部分 &#xff08;3&#xff09;router-policy注意事项 二.优选规则 ①丢弃下一跳不可达 (1)优选prefered-value值大的路由 1.首选优先级 (2)优选local-preference(本地…

绿色消费新趋势:共享购模式的积分革命

在当今绿色消费风潮中&#xff0c;一种名为共享购的新模式正悄然兴起&#xff0c;它通过创新的绿色积分机制&#xff0c;不仅鼓励了消费者的绿色消费行为&#xff0c;还为消费者和商家带来了更多的实惠与额外收益。 传统积分机制的局限 在传统的消费积分模式中&#xff0c;消费…

VMware Workstation 安装CentOS Linux操作系统

1.我们已经下载好VMware 创建新的虚拟机 2.选择典型 3.安装程序光盘映像文件 4.配置用户名密码 5.命名虚拟机&#xff0c;并确定位置 6.如图所示设置 7.等待&#xff08;时间会有点久&#xff09; 8.输入密码登入账号

高德、百度开车导航APP是怎么知道红绿灯倒计时的?

高德、百度开车导航APP之所以能够知道红绿灯的倒计时&#xff0c;这背后是一系列复杂的科技手段和数据分析的综合运用。从交管部门提供的数据&#xff0c;到导航软件自身通过大数据和算法进行的计算&#xff0c;每一个环节都为红绿灯倒计时的准确呈现提供了支撑。 首先&#xf…

XMind 头脑风暴/思维导图软件_V24.04.10291 PC高级版

一款风靡全球的头脑风暴和思维导图软件&#xff0c;为激发灵感和创意而生。在国内使用广泛&#xff0c;拥有强大的功能&#xff0c;包括思维管理&#xff0c;商务演示&#xff0c;与办公软件协同工作等功能。XMind中文版采用全球先进的Eclipse RCP软件架构&#xff0c;是集思维…

搞大事!法国邀请芬兰公司建量子工厂

法国当地时间5月13日&#xff0c;法国总统马克龙宣布启动2024年度“选择法国”&#xff08;Choose France&#xff09;商业峰会。今年峰会召开前&#xff0c;法国赢得了创纪录的150亿欧元外国投资承诺&#xff0c;覆盖从人工智能到制药和能源等领域。 而涉及到量子领域最重磅的…

技术架构

一、单机架构 简介&#xff1a;应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期&#xff0c;访问量比较小&#xff0c;单机足以满足 架构工作原理&#xff1a;以电商为例&#xff0c;可以看到通过应用&#xff08;划分了多个模块&#xff09;和数据库在单个服…

能自动化视频剪辑的开源工具来了 剪辑师、自媒体作者狂喜

项目简介 Funclip 是阿里巴巴通义实验室开源的一款视频剪辑工具&#xff0c;专门用于精准、便捷的视频切片。 它能够自动识别视频中的中文语音并允许用户根据语音内容来裁剪视频。该工具使用了阿里巴巴语音识别模型FunASR Paraformer-Large确保了剪辑的精准性。 你可以根据识…

聚鼎科技:装饰画行业到底怎么样

在当代社会&#xff0c;随着人们审美水平的提升和生活品质的追求&#xff0c;装饰画行业呈现出蓬勃的发展态势。这一行业不仅关系到文化艺术的传承与创新&#xff0c;也与市场经济紧密相连&#xff0c;其前景值得深入探讨。 装饰画行业的市场潜力巨大&#xff0c;它贯穿于家居装…

其它高阶数据结构②_图(概念+存储+遍历+最小生成树)

目录 1. 图的概念 2. 图的存储结构 2.1 邻接矩阵&#xff08;后面算法所用&#xff09; 2.2 邻接表 3. 图的遍历 3.1 BFS广度优先遍历 3.2 DFS深度优先遍历 4. 最小生成树 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 图的概念 图是由顶点集合及顶点间的关系组成的一…

AI 绘画神器 Fooocus 图生图:图像放大或变化、图像提示、图像重绘或扩充、反推提示词、生成参数提取、所需模型下载

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文讲述 Fooocus 的图生图功能&#xff0c;主要内容包括&#xff1a;图像放大或变化、图像提示、图像重绘或扩充、反推…

没有疯狂内卷的日本智能机市场,小屏与设计仍旧是主流

如果聊起国内的智能机市场&#xff0c;我想大多数人的印象就是疯狂内卷。卷影像、卷屏幕、卷快充、卷性能……客观地说&#xff0c;国内的3C产品还是很有质价比的。不过在没有如此内卷的日本市场&#xff0c;各种小屏手机仍旧是主流。 除了苹果外&#xff0c;日本本土品牌的夏普…

SDL系列(四)—— 事件机制

事件循环 大多数多媒体程序依靠 事件系统 来处理输入。 SDL 为处理输入事件提供了灵活的 API 。 本质上&#xff0c; SDL 将来自设备&#xff08;如键盘&#xff0c;鼠标或控制器&#xff09;的输入记录为 事件 &#xff0c;将它们存储在 “ 事件队列 ”中。 您可以将此…

3D轻量化引擎HOOPS Communicator在PLM全生命周期管理中的应用

在当今快速发展的工业领域&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;是确保产品从设计到市场再到最终退役过程中信息一致性和流程效率的关键。 随着3D模型的日益复杂化和数据量的不断增长&#xff0c;传统的PLM系统面临着数据管理和渲染效率的挑战。HOOPS Comm…

pandas dataframe 的几种过滤数据的方法

pandas dataframe简介 Pandas是一个用于数据科学的开源Python库。这个库在整个数据科学行业被广泛使用。它是一个快速和非常强大的python工具来执行数据分析。Pandas为我们提供了读取、过滤、检查、操作、分析和绘制数据的命令。它使用内置函数加载以各种文件格式存储的数据&a…

圆片/圆盘测厚设备 HW01-SG系列单点测厚仪

关键字:圆片测厚仪圆盘测厚仪, 圆形测厚仪, 单点测厚仪, 汽车工件测厚仪, 产品简介&#xff1a; 测厚仪采用上下两个对射的激光位移传感器测量圆盘状物体边缘的厚度。圆盘放置在由步进电机驱动的托盘上&#xff0c;点按测量按钮托盘旋转一周&#xff0c;可测量被测物整个圆周上…

三:哈希map day6 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

今日任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 今日任务 242.有效的字母异位词 题目 大型概括&#xff1a;map 的使用 1.题目描述-->思路&#xff1a; 给出两个string s,t; …

开放式运动耳机哪款好用?五款高性能值得信赖产品推荐

身为户外运动的达人&#xff0c;我发现开放式运动耳机简直是咱们运动时的最佳拍档&#xff0c;不管是跑步还是健身&#xff0c;开放式运动耳机最为舒适&#xff0c;它的妙处就在于不用塞进耳朵&#xff0c;这样既安全又卫生&#xff0c;户外动起来更放心。但市面上好坏参半&…

SDL系列(一)—— 小白入门

SDL &#xff08; Simple DirectMedia Layer &#xff09; 是一套开放源代码的 跨平台多媒体开发库 &#xff0c;使用 C 语 言写成。 SDL 提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的 代码就可以开发出 跨多个平台&#xff08; Linu…