QT 学习笔记(四)

本文详细介绍了QT编程中的坐标系统,包括主窗口和子窗口的移动方法,并通过实例展示了负坐标的效果。同时,文章探讨了QT的内存回收机制,强调了指定父对象后,动态分配的内存会自动释放。此外,还提供了代码示例,演示了如何在实际项目中应用这些概念。最后,简单提及了菜单栏和工具栏的创建,以及它们在QT界面设计中的作用。

由于每次代码都是在原有程序上修改,因此除了新建项目,不然一般会在学完后统一展示代码。
提示:具体项目创建流程和注意事项见QT 学习笔记(一)
提示:具体项目准备工作和细节讲解见QT 学习笔记(二)

一、坐标系统

  • 生成一个新的项目,具体步骤过程见提示。

1. 主窗口移动

  • 在源文件 widget.cpp 当中进行代码编写。
  • move(x, y) 表示,相对于屏幕而言,以左上角为原点,向右移动 x ,向下移动 y。具体结果如下图所示:

在这里插入图片描述

  • 此时,主窗口向右移动 0 ,向下移动 0,生成的窗口应该在左上角。

在这里插入图片描述

  • 随后,我们修改代码为 move(200, 50),表示主窗口向右移动 200 ,向下移动 50,生成窗口的位置会发生变化。(额,生成的窗口刚好挡住了代码,不过不重要,如此简单的步骤大家肯定都会修改。)

在这里插入图片描述

  • 肯定有人好奇我的 x,y 如果为负数是什么情况,在这里做一个简单的尝试。具体结果如下图所示::

在这里插入图片描述

2. 子窗口移动

  • 在源文件 widget.cpp 当中进行代码编写。
  • 子窗口的移动方式与主窗口相同,但是子窗口的移动是相对于主窗口的内部区域而言,以左上角为原点,向右移动 x ,向下移动 y。具体结果如下图所示:

在这里插入图片描述

  • 那么,当我们有多个子窗口相互嵌套时,每一个子窗口的移动都是在其对应的父窗口当中,以对应父窗口的内部区域为原点,进行移动。具体结果如下图所示:

在这里插入图片描述

二、内存回收机制

  • 在坐标系统当中,我们使用 new 来在堆区开辟空间,对于 new 开辟的空间,当我们使用完后,要及时释放,不然会有内存泄漏的风险。

在这里插入图片描述

  • QT 内部会自己生成内部对象数,就像 QObject 是 Qwidget 的指定父对象,Qwidget 是 b1 的指定父对象,b1 是 b2 的指定父对象,整体就会像一个二叉树。
  • 只要我们指定了父对象,当我们的程序结束之后,那些指定父对象的空间假如是动态分配空间的,会自动释放,回收内存。
  • 知识点补充:构造函数生成的,会在析构函数释放,new 与 delete 相对应。
  • 对于上述情况的验证,我们首先需要添加一个对应按钮 mybutton 的头文件和源文件(具体步骤见前文),然后修改相应的 QWidget 为 QPushButton ,因为只有当我继承于 QPushButton ,我才可以是一个按钮。
  • 头文件 mybutton.h

在这里插入图片描述

  • 源文件 mybutton.cpp

在这里插入图片描述

  • 进行新按钮析构函数的编写和调用后,会得到如下结果:

在这里插入图片描述

  • 总结: (1) 指定父对象后,(2) 直接或间接继承于 QObject ,如果满足两个条件任意一个,并且子对象是动态分配空间的 new ,那就不需要手动释放 delete ,系统会自动释放。

三、代码(坐标系统,内存回收机制)

1. 主窗口头文件 —— widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚心求知的熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值