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:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel…...
论文合集整理推荐2024.5.15
2012年论文合集:论文入口 2019年论文合集:论文入口 2022年论文合集:论文入口 2023年论文合集:论文入口 2024年论文合集:论文入口...
JavaScript的跳转传参方式
在JavaScript中,页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法: 1.URL参数(Query String) 这是最常见的方式,通过在URL的末尾添加参数来实现。例如: javascriptwindow.loc…...
非阻塞模式下的读写操作
实现文件IO的非阻塞模式的读写操作 fcntl函数 功能: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); // arg表示可变参数,由cmd决定 fcntl()对打开的文件描述符fd执行下面描述的操作之一。操作由cmd决…...

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

AI大模型探索之路-训练篇23:ChatGLM3微调实战-基于P-Tuning V2技术的实践指南
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
掌握核心概念:Java高级面试难题精解(一)
Java 高级面试问题及答案 问题1: 在Java中,什么是泛型擦除?为什么需要它? 答案: 泛型擦除是Java编译器的一个特性,它在运行时移除泛型类型信息,以确保类型安全。Java的泛型是在J2SE 1.5中引入的ÿ…...
Nagle算法
Nagle算法简介 Nagle算法主要是避免发送小的数据包,要求TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。 在默认的情况下,Nagle算法是默认开启的,Nagle算法比较适用于发送方发送大批量的小数据&…...

MPLS小实验
实验图: 实验要求: 要求使用MPLS技术,将实验通,并在实验结束后使用命令:tracert -v -a 看是否基于标签进行转发。 如上:在每台路由器上都有两个环回,一个用于模拟用户网段,一个用于M…...
MongoDB聚合运算符:$week
MongoDB聚合运算符:$week 文章目录 MongoDB聚合运算符:$week语法使用举例 $week聚合运算符返回指定日期日期为一年中第几周的数字值为0到53之间。周从周日开始,第1周从一年的第一个周日开始。一年中第一个星期日之前的日期为第0周。这和 str…...

【Linux】如何定位客户端程序的问题
文章目录 1 客户端程序和服务端程序的差别2 问题类型2.1 崩溃(crash)2.2 CPU高2.3 内存高2.4 线程卡死 3 总结 1 客户端程序和服务端程序的差别 客户端程序是运行在终端上,通常都会与业务系统共存,而服务端程序通常会运行在单独的节点上,或者…...
AI学习指南数学工具篇-PCA基础知识
AI学习指南数学工具篇-PCA基础知识 1. PCA是什么? PCA,即主成分分析(Principal Component Analysis),是一种常用的数据降维技术。它通过线性变换将原始数据投影到一个新的坐标系中,旨在找到数据中的“主成…...

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术
文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1)数据加密标准(DES)2)三重DES(Triple-DES)3)国际数据加密算法(IDEA)4)高级加密标准(AES…...
Leetcode 404:左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。 思路:遍历树,寻找左叶子节点; 如果判断是左叶子节点,就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…...

Keil问题解决:结构体数组初始化,初始化后的值不是目标值
省流:使用的编译器为compiler version 6,切换为compiler version 5 如果缺少编译器,请参考:Keil手动安装编译器V5版本 结构体定义: typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…...
C++set关联式容器
Cset 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的࿰…...

Celery Redis 集群版连接和PyCharm启动配置
目录 使用Redis cluster版作为broker原因 PyCharm配置 使用Redis cluster版作为broker 在celery5及其之前版本,需要配置如下才可行 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 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…...
springboot集成dubbo实现微服务系统
目录 1.说明 2.示例 3.总结 1.说明 dubbo官网:https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,支持多种语言,官方提供了 Java、Golang 等多语言 SDK 实…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...