当前位置: 首页 > news >正文

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

效果
在这里插入图片描述

相关文章:

C++列表实现

文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel&#xff1a;一个抽象的类&#xff0c;为数据项模型提供抽象的接口&#xff0c;常见的的数据模型列如&#xff1a;QStringListModel,QStandardItemMode,QDirModel…...

论文合集整理推荐2024.5.15

‍2012年论文合集&#xff1a;论文入口 ‍2019年论文合集&#xff1a;论文入口 2022年论文合集&#xff1a;论文入口 2023年论文合集&#xff1a;论文入口 2024年论文合集&#xff1a;论文入口...

JavaScript的跳转传参方式

在JavaScript中&#xff0c;页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法&#xff1a; 1.URL参数&#xff08;Query String&#xff09; 这是最常见的方式&#xff0c;通过在URL的末尾添加参数来实现。例如&#xff1a; javascriptwindow.loc…...

非阻塞模式下的读写操作

实现文件IO的非阻塞模式的读写操作 fcntl函数 功能&#xff1a; #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); // arg表示可变参数&#xff0c;由cmd决定 fcntl()对打开的文件描述符fd执行下面描述的操作之一。操作由cmd决…...

Google Ads谷歌广告账户被封停怎么办?

跨境出海业务少不了需要做Google Ads推广业务&#xff1b;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时&#xff0c;就会发生这种情况。那么如何在做广告推广的同时&#xff0c;保证账号不被封禁呢&#xff1f;看…...

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

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

掌握核心概念:Java高级面试难题精解(一)

Java 高级面试问题及答案 问题1: 在Java中&#xff0c;什么是泛型擦除&#xff1f;为什么需要它&#xff1f; 答案&#xff1a; 泛型擦除是Java编译器的一个特性&#xff0c;它在运行时移除泛型类型信息&#xff0c;以确保类型安全。Java的泛型是在J2SE 1.5中引入的&#xff…...

Nagle算法

Nagle算法简介 Nagle算法主要是避免发送小的数据包&#xff0c;要求TCP连接上最多只能有一个未被确认的小分组&#xff0c;在该分组的确认到达之前不能发送其他的小分组。 在默认的情况下,Nagle算法是默认开启的&#xff0c;Nagle算法比较适用于发送方发送大批量的小数据&…...

MPLS小实验

实验图&#xff1a; 实验要求&#xff1a; 要求使用MPLS技术&#xff0c;将实验通&#xff0c;并在实验结束后使用命令&#xff1a;tracert -v -a 看是否基于标签进行转发。 如上&#xff1a;在每台路由器上都有两个环回&#xff0c;一个用于模拟用户网段&#xff0c;一个用于M…...

MongoDB聚合运算符:$week

MongoDB聚合运算符&#xff1a;$week 文章目录 MongoDB聚合运算符&#xff1a;$week语法使用举例 $week聚合运算符返回指定日期日期为一年中第几周的数字值为0到53之间。周从周日开始&#xff0c;第1周从一年的第一个周日开始。一年中第一个星期日之前的日期为第0周。这和 str…...

【Linux】如何定位客户端程序的问题

文章目录 1 客户端程序和服务端程序的差别2 问题类型2.1 崩溃(crash)2.2 CPU高2.3 内存高2.4 线程卡死 3 总结 1 客户端程序和服务端程序的差别 客户端程序是运行在终端上&#xff0c;通常都会与业务系统共存&#xff0c;而服务端程序通常会运行在单独的节点上&#xff0c;或者…...

AI学习指南数学工具篇-PCA基础知识

AI学习指南数学工具篇-PCA基础知识 1. PCA是什么&#xff1f; PCA&#xff0c;即主成分分析&#xff08;Principal Component Analysis&#xff09;&#xff0c;是一种常用的数据降维技术。它通过线性变换将原始数据投影到一个新的坐标系中&#xff0c;旨在找到数据中的“主成…...

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术

文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1&#xff09;数据加密标准&#xff08;DES)2&#xff09;三重DES&#xff08;Triple-DES&#xff09;3&#xff09;国际数据加密算法&#xff08;IDEA&#xff09;4&#xff09;高级加密标准&#xff08;AES&#xf…...

Leetcode 404:左叶子之和

给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 思路&#xff1a;遍历树&#xff0c;寻找左叶子节点&#xff1b; 如果判断是左叶子节点&#xff0c;就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…...

Keil问题解决:结构体数组初始化,初始化后的值不是目标值

省流&#xff1a;使用的编译器为compiler version 6&#xff0c;切换为compiler version 5 如果缺少编译器&#xff0c;请参考&#xff1a;Keil手动安装编译器V5版本 结构体定义&#xff1a; typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…...

C++set关联式容器

Cset 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…...

Celery Redis 集群版连接和PyCharm启动配置

目录 使用Redis cluster版作为broker原因 PyCharm配置 使用Redis cluster版作为broker 在celery5及其之前版本&#xff0c;需要配置如下才可行 celery_app.conf.update( broker_transport_options{“global_keyprefix”: “{celery}:”}, ) 原因 https://github.com/celery/…...

「AIGC算法」readLink实现url识别pdf、网页标题和内容

本文主要介绍AIGC算法,readLink实现url识别pdf、html标题和内容 一、设计思路 识别url是pdf或者网页网页处理逻辑,使用cheerio解析网页PDF处理逻辑,使用pdf-parse解析PDF文件自定义的函数来提取标题和内容二、可执行核心代码 const express = require("express")…...

Vue3+ts(day06:路由)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…...

springboot集成dubbo实现微服务系统

目录 1.说明 2.示例 3.总结 1.说明 dubbo官网&#xff1a;https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;支持多种语言&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...