作业-12.12【写注释,QT项目和对象对象树模型】

news2024/11/26 0:24:41

将QT项目中每个文件的每行代码自行注释一遍

#项目过程管理文件
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#所需的类库,超过4版本要加widgets
CONFIG += c++11
#支持c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
#源文件
SOURCES += \
    main.cpp \
    widget.cpp
#头文件
HEADERS += \
    widget.h
#图形化界面文件
FORMS += \
    widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }          //命名空间的声明
QT_END_NAMESPACE
//派生的自定义图形化界面,基类是QWidget
class Widget : public QWidget
{
    Q_OBJECT                            //信号和槽操作有关
signals:
    void change();                      //定义了一个信号,但是没有
public slots:
    void on_change_slot();              //自定义的槽函数  是一个完整的函数,既有声明也有定义
public:
    Widget(QWidget *parent = nullptr);  //自定义的构造函数的声明,参数是一个QWidget的指针,依附于父类组件
    ~Widget();                          //析构函数
private:
    Ui::Widget *ui;                     //UI指针,通过UI指针可以完成对窗口属性的设置和调整,与使用Designer工具
                                       //的效果是一样的
};
#endif // WIDGET_H
#include "widget.h"             //引入本工程下的头文件
#include "ui_widget.h"          //ui文件生产的头文件
Widget::Widget(QWidget *parent) //定义了自定义类
    : QWidget(parent)           //调用父类的有参构造,来完成子类继承父类成员的初始化
    , ui(new Ui::Widget)        //给UI指针,来完成实例化空间
{
    ui->setupUi(this);          //调用ui中的成员函数
}
Widget::~Widget()               //定义自定义的析构函数
{
    delete ui;                  //释放UI指针的空间
}
#include "widget.h"                 //引入本工程的头文件
#include <QApplication>             //引入应用程序的头文件
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);     //实例化一个QApplication类的对象
    Widget w;                       //在栈区申请一片空间
    w.show();                       //调用展示应用程序的函数
    return a.exec();                //等待被唤醒
}

手动实现对象对象树模型

#include <iostream>
#include <list>
//命名空间的声明
using namespace std;
//自定义对象树类
class my_object
{
public:
    list<my_object *> child;            //子组件链表
public:
    my_object(my_object *parent = nullptr) //带默认参数的有参构造,使用的时候也可以无参,无参时使用默认参数
    {
        if(parent != nullptr)       //如果传入了参数就执行分支语句中的语句块
        {
            //说明创建对象的时候,给定了父组件,说明要将自己的地址放到父组件的孩子链表中
            parent->child.push_back(this);
        }
    }
    virtual ~my_object()        //将父类的析构函数设置为虚函数,可以将子组件一起释放
    {
        for(auto p = child.begin(); p!=child.end(); p++)    //循环遍历析构子组件,直至全部析构完
        {
            delete *p;
        }
    }
};
//派生类A
class A : public my_object
{
public:
    A(my_object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);
        }
        cout<< "A::构造函数" <<endl;
    }
    virtual ~A()
    {
        cout<< "A::析构函数" <<endl;
    }
};
//派生类B
class B : public my_object
{
public:
    B(my_object *parent = nullptr)
    {
        if(parent != nullptr)
        {
            parent->child.push_back(this);
        }
        cout<< "B::构造函数" <<endl;
    }
    virtual ~B()
    {
        cout<< "B::析构函数" <<endl;
    }
};
int main()
{
    A w;    //在栈区申请空间,相当于自己的MyWnd
    B *btn = new B(&w);
    return 0;
}

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

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

相关文章

MySQL 自定义函数一文读懂

MySQL函数 含义&#xff1a;一组预先编译好的SQL语句的集合&#xff0c;理解成批处理语句 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数&#xff0c;提高了效率。 存储过程与函数区别&#xff1a; 存储过程&#xff1a;可以有0个返…

内部群炸锅了,同事又删库了

事件起因 我们的系统中有数据导入的功能&#xff0c;可以把特定的格式的excel数据导入到系统中来 由于客户电脑的文件比较多&#xff0c;很多文件的名字也比较相近&#xff0c;客户在导入excel时选错了文件 这个错误的excel文件的格式恰好能被系统解析&#xff0c;客户也没及…

【专栏】实践篇08| All in docker!动手搭建Redis集群

关注公众号&#xff1a;【离心计划】&#xff0c;一起逃离舒适圈 Redis专栏合集 【专栏】01| Redis夜的第一章 【专栏】基础篇02| Redis 旁路缓存的价值 【专栏】基础篇03| Redis 花样的数据结构 【专栏】基础篇04| Redis 该怎么保证数据不丢失&#xff08;上&#xff09…

(附源码)Spring Boot的网上作业管理系统 毕业设计 612317

基于Spring Boot的网上作业管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现…

【正点原子FPGA连载】第三十三章OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十三章OV564…

02-Neo4j-CQL

02-Neo4j-CQL&#xff1a; 1、CQL简介 CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL&#xff0c;Neo4j具有CQL作为查询语言。 Neo4j CQL 它是Neo4j图形数据库的查询语言。它是一种声明性模式匹配语言它遵循SQL语法。它的语法是非常简单且人性化、可读的格式。 …

具有成本效益的深度信任网络的智能LEACH的多级动态优化(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 能量利用率是能量受限无线传感器网络&#xff08;WSN&#xff09;的关键属性&#xff0c;它直接影响网络的寿命。LEACH&#x…

C++入门篇之 注释语法什么写

&#x1f4d2;博客主页&#xff1a; ​​开心档博客主页​​ &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由开心档原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2022年12月12日&#x1f334; ✉…

python+requests接口自动化测试框架实例详解教程

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

windows下Qt 5的安装与编译打包

环境与版本 操作系统&#xff1a;windows 10 Qt版本&#xff1a;5.14.2&#xff0c;最后一个有独立安装包的版本&#xff0c;下载地址&#xff1a;archive/qt/5.14/5.14.2 IDE&#xff1a;自带的qt-creator 4.11.1&#xff0c;也可以自行下载其他版本4.14.2&#xff0c;下载…

Mybatis实现增删改查

准备工作&#xff1a;建立项目&#xff0c;连接数据库MySQL&#xff0c;安装Mybatix插件 数据库代码准备&#xff1a; -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主键id int primary key auto_increment,…

itop3568开发板旋转uboot logo和内核logo

修改设备树 rk_android11.0_sdk/kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi 文件。如果配套的屏幕是 LVDS 7 寸屏幕或者 LVDS10.1 寸 1024*600 屏幕或者 LVDS10.1 寸 1280*800 屏幕&#xff0c;修改如下所示。 &route_lvds{ status "okay"; …

使用Postman+JMeter进行简单的接口测试

以前每次学习接口测试都是百度&#xff0c;查看相关人员的实战经验&#xff0c;没有结合自己公司项目接口真正具体情况。 这里简单分享一下公司项目Web平台的一个查询接口&#xff0c;我会使用2种工具Postman和JMeter如何对同一个接口做调试。 准备工作 首先&#xff0c;登录公…

GATK Germline_SNP_INDEL_2.0 分析遗传病(耳聋)

GATK Germline_SNP_INDEL_2.0 分析遗传病&#xff08;耳聋&#xff09; 一、本文是Gatk Germline spns-indels Pipeline 分析遗传病(耳聋)的升级版&#xff0c;目的是提供开箱即用的分析流程&#xff0c;尽可能简化部署和迁移。 更新内容如下&#xff1a; 人类参考基因组以及…

RTSP 媒体协议流的录制方案及其覆盖策略详解

前言 在安防和监控领域&#xff0c;RTSP 媒体协议流有很广泛的使用。本文将介绍一种针对 RTSP 媒体流的录制方案及其相应的覆盖策略。据我所知&#xff0c;声网的实时录制功能支持三种模式&#xff0c;分别是云端录制、本地服务端录制和页面录制&#xff0c;今天我们介绍的录制…

[基因遗传算法]进阶之六:VRP的进阶经典问题的解码如何写

文章目录一、CVRP二、MDCVRP2.1 解的编码分析2.2 代码2.3 分割展示三、VRPTW四、MDVRPTW4. 1 解的编码分析4.2 解的代码4.3 结果展示4. 4 MDVRPTW的计算适应度4.5 MDVRPTWd的结果展示图一、CVRP 见博文《[基因遗传算法]进阶之三:实践CVRP》 二、MDCVRP 参考资料:《Python实现…

Qt的场景图Scene Graph

叫场景树更合适&#xff0c;本质不是图。QML场景中的Qt Quick项目将填充QSGNode实例树。 场景图是Qt Quick 2.0引入的&#xff0c;建立在要绘制的内容是已知的基础上。所有QML项目均使用场景图进行渲染&#xff0c;场景图的默认实现是与OpenGL紧密相关的低级高性能渲染堆栈。 …

谈谈前端性能优化-面试版

前言 当我们去面试的时候&#xff0c;很大概率会被面试官问这么一个问题&#xff1a;你有尝试过对项目做性能优化吗&#xff1f;或者你了解哪些性能优化的方法&#xff1f;听到这个问题的你可能是这样的&#xff1a; 似曾相识但又说不清楚&#xff0c;往往只能零散地说出那么几…

Go string原理简析

引入 当查看string类型的变量所占的空间大小时&#xff0c;会发现是16字节&#xff08;64位机器&#xff09;。 str : "hello"fmt.Println(unsafe.Sizeof(str)) // 16也许你会好奇&#xff0c;为什么是16字节&#xff0c;它的底层存储模型是什么样子的。 源码分析 …

焦脱镁叶绿酸-a修饰量子点/荧光/药物/小分子抑制剂/上转换纳米颗粒/树枝状聚合物

小编在这里为大家分享的科研内容是焦脱镁叶绿酸-a修饰量子点/荧光/药物/小分子抑制剂/上转换纳米颗粒/树枝状聚合物的相关研究&#xff0c;来看&#xff01; 焦脱镁叶绿酸-a简介&#xff1a; 焦脱镁叶绿素-a是产物叶绿素a通过脱甲氧羰基、去植物醇、去Mg后的产物。该类物质具有…