Qt C++ 显示多级结构体,包括结构体名、变量名和值

文章目录

      • mainwindow.h
      • mainwindow.cpp
      • structures.h
      • main.cpp


QTreeView 和 QStandardItemModel 来实现。以下是实现这一功能的步骤和示例代码:

定义多级结构体:
假设你有一个多级结构体,如下所示:

struct SubStruct {int subValue1;QString subValue2;
};struct MainStruct {int mainValue1;QString mainValue2;SubStruct subStruct;
};

以下是完整的示例代码:

mainwindow.h

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QStandardItemModel>
#include <QTreeView>#include "structures.h" // 假设结构体定义在这个头文件中class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:QTreeView *treeView;QStandardItemModel *model;void populateTree(const MainStruct &mainStruct, QStandardItem *parentItem);
};

mainwindow.cpp

#endif // MAINWINDOW_H
// mainwindow.cpp
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{treeView = new QTreeView(this);setCentralWidget(treeView);model = new QStandardItemModel(this);treeView->setModel(model);MainStruct mainStruct;mainStruct.mainValue1 = 10;mainStruct.mainValue2 = "Main Value 2";mainStruct.subStruct.subValue1 = 20;mainStruct.subStruct.subValue2 = "Sub Value 2";QStandardItem *rootItem = model->invisibleRootItem();populateTree(mainStruct, rootItem);
}MainWindow::~MainWindow()
{
}void MainWindow::populateTree(const MainStruct &mainStruct, QStandardItem *parentItem)
{QStandardItem *mainStructItem = new QStandardItem("MainStruct");parentItem->appendRow(mainStructItem);QStandardItem *mainValue1Item = new QStandardItem("mainValue1");mainValue1Item->appendRow(new QStandardItem(QString::number(mainStruct.mainValue1)));mainStructItem->appendRow(mainValue1Item);QStandardItem *mainValue2Item = new QStandardItem("mainValue2");mainValue2Item->appendRow(new QStandardItem(mainStruct.mainValue2));mainStructItem->appendRow(mainValue2Item);QStandardItem *subStructItem = new QStandardItem("SubStruct");mainStructItem->appendRow(subStructItem);QStandardItem *subValue1Item = new QStandardItem("subValue1");subValue1Item->appendRow(new QStandardItem(QString::number(mainStruct.subStruct.subValue1)));subStructItem->appendRow(subValue1Item);QStandardItem *subValue2Item = new QStandardItem("subValue2");subValue2Item->appendRow(new QStandardItem(mainStruct.subStruct.subValue2));subStructItem->appendRow(subValue2Item);
}

structures.h

// structures.h
#ifndef STRUCTURES_H
#define STRUCTURES_H#include <QString>struct SubStruct {int subValue1;QString subValue2;
};struct MainStruct {int mainValue1;QString mainValue2;SubStruct subStruct;
};#endif // STRUCTURES_H

main.cpp

// main.cpp
#include <QApplication>
#include "mainwindow.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}

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

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

相关文章

CISC和RISC的区别

CISC是什么 CISC是一种指令集设计方式&#xff0c;全程叫复杂指令集&#xff0c;这种指令设计模式包含大量的复杂指令和复杂的寻址方式&#xff0c; 以下是CISC架构的一些主要特点&#xff1a; 丰富的指令集&#xff1a;CISC处理器通常包含大量的指令&#xff0c;这些指令覆盖…

20 设计模式之职责链模式(问题处理案例)

一、什么是职责链模式 职责链模式是一种行为型设计模式&#xff0c;它允许将请求沿着处理者的链进行传递&#xff0c;直到有一个处理者能够处理它为止。换句话说&#xff0c;它将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理这个请求&#xff0c;从而避免了将…

linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程

系统服务 书接上文: linux自启任务详解 演示系统:ubuntu 20.04 开发部署项目的时候常常有这样的场景: 业务功能以后台服务的形式提供,部署完成后可以随着系统的重启而自动启动;服务异常挂掉后可以再次拉起 这个功能在ubuntu系统中通常由systemd提供 如果仅仅需要达成上述的场…

ros项目dual_arm_pick-place(moveit和gazebo联合仿真)(一)

目录 前言正文创建功能包具体代码运行 总结 前言 dual_arm_pick-place项目中&#xff0c;实现了两套的moveit和gazebo联合仿真。 启动文件分别是bringup_moveit.launch和arm_bringup_moveit.launch。 在这个项目中&#xff0c;我将代码重新创建了一个包&#xff0c;co_simula…

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…

MySQL生产环境备份脚本

全量备份脚本&#xff0c;其中BakDir&#xff0c;ZlbakDir&#xff0c;LogFile需要自己创建 #!/bin/bash export LANGen_US.UTF-8# 指定备份目录 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量备份目录 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 备份日志…

HTTP multipart/form-data 请求

序言 最近在写项目的过程中有一个需求是利用 HTTP 协议传输图片和视频&#xff0c;经过查询方法相应的方法发现使用 multipart/form-data 的方式&#xff0c;这是最常见处理二进制文件的表单编码类型。  学习了一下午&#xff0c;现在总结一下使用的方法和相关的知识点&#x…

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…

如何使用靜態IP代理?【詳細教程】

靜態IP地址是手動分配給設備或伺服器的固定不變的 IP。與動態 IP 地址不同&#xff0c;動態 IP 地址由 DHCP 伺服器自動分配&#xff0c;並且會隨時間而變化。​​​​​​​ 如何獲取和設置靜態IP地址 一、檢查是否需要靜態IP&#xff1f; 在配置靜態 IP 之前&#xff0c;請…

监控组态软件的构成与功能

监控组态软件的构成包括系统开发环境、图形界面系统、实时数据库系统等。其功能包括数据采集与控制、人机交互界面、数据处理与存储等。 监控组态软件的构成&#xff1a; 系统开发环境&#xff1a;这是自动化工程设计工程师为实施其控制方案&#xff0c;在组态软件的支持下进行…

Java 基础之 XQuery:强大的 XML 查询语言

一、什么是 XQuery XQuery 是一种函数式语言&#xff0c;专门用于检索以 XML 格式存储的信息。它负责从 XML 文档中查找和提取元素及属性&#xff0c;在网络服务中有着广泛的应用&#xff0c;比如提取信息、生成摘要报告、进行数据转换等。 XQuery 是 W3C 设计的一种针对于 X…

day09性能测试(1)——纯理论

document.querySelector(video).playbackRate 2.5 //可以写任何数字 【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、性能测试概念 2、功能测试 vs 性能测试 3、小结&#xff08;习题&#xff09; 4、性能测试的策略 4.1 基准测试 4.2 负载测试 …

docker-3.docker权限问题

docker权限,每次开机都要重新sudo 目录 1.简介2.解决办法1:当前用户添加到docker用户组(这个方法还是缺权限??)3.解决办法2:临时更改Docker socket文件权限1.简介 Ubuntu下Docker提示permission denied (权限不足)解决办法 安装docker后,执行docker ps命令时提示 perm…

easyExcel实现表头批注

背景&#xff1a; 网上大部分都不能直接使用&#xff0c;为此总结一个方便入手且可用的工具&#xff0c;用自定义注解实现 依赖包&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…

内部类和Object类

匿名对象 格式&#xff1a; 匿名对象只可以调用一次成员 &#xff1a; 1. 调用一次成员变量 &#xff1a; new 类名(实参).成员变量名&#xff1b; 2.调用一次成员方法&#xff1a; new 类名(实参).成员方法名(实参)&#xff1b; 匿名对象存在的必要&#xff1a;为了提高…

Python的3D可视化库vedo 1-3 (visual模块)网格对象的线和面、图片的属性

文章目录 4 MeshVisual4.1 线条4.1.1 线宽和颜色4.1.2 线条渲染为管 4.2 曲面4.2.1 物体展示为实心或框架4.2.2 曲面插值4.2.3 面的剔除 4.3 纹理4.4 相机跟随 5 ImageVisual5.1 图片属性5.1.1 占用内存大小5.1.2 颜色标量范围 5.2 渲染属性5.2.1 透明度5.2.2 亮度5.2.3 对比度…

19 设计模式之享元模式(电影院座位预定案例)

一、享元模式的定义 享元模式是一种结构型设计模式&#xff0c;它通过共享对象来支持大量细粒度的对象&#xff0c;减少内存消耗。享元模式的核心思想是&#xff1a;将对象分为共享部分和非共享部分&#xff0c;只有共享部分是被多个对象共享的&#xff0c;而非共享部分则是每个…

使用redis 的stream 做消息中间件 多线程消费消息

1.redis stream 特点 1.支持消息持久化 2.消费者组模式 3.消息确认机制 4. 消息重试机制 5. 死信队列2. 消息生产者服务 2.1 如下代码Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…

Python100道练习题

Python100道练习题 BIlibili 1、两数之和 num1 20 num2 22result num1 num2print(result)2、一百以内的偶数 list1 []for i in range(1,100):if i % 2 0:list1.append(i) print(list1)3、一百以内的奇数 # 方法一 list1 [] for i in range(1,100):if i % 2 ! 0:lis…

Java转C之并发和多线程

提纲&#xff1a; 概念介绍与对比概述 简述Java与C在并发和多线程方面的核心区别解释C11标准、POSIX、C11 <threads.h>、Pthread等名词 Java多线程与并发回顾 线程、Runnable、ExecutorService概念说明同步关键字与工具类含义 C并发基础 没有Java式的内置线程类&#xf…