QT学习(三)——第一个QT小程序

 一、在当前窗口创建按钮

 效果:

 添加一个新文件:

代码详解(待补充):

 

         在Qt框架中,setParent() 函数用于设置一个控件的父控件。这通常是控件对象树的一部分,控件树反映了控件的层次结构。当一个控件设置了一个父控件后,它就会成为父控件的子控件,并且会根据父控件的布局进行定位和绘制。

        setParent(this) 函数调用将 myBtn 设置为 this 的子控件。在这个上下文中,this 指针指向当前的 MyWidget 对象,这意味着 myBtn 将成为 MyWidget 的一个子控件。

         在C++等编程语言中,this 是一个指向当前对象本身的指针。在类成员函数中使用 this 指针,可以访问当前对象的数据成员和成员函数。

二、我的疑问

 

这素什么???

QDbug

Qt中的QDebug是一个用于输出调试信息的类。它提供了一种简单的方法来在控制台或日志文件中输出调试信息,帮助开发者监视程序的运行状态和变量值。QDebug是Qt核心模块的一部分,可以在Qt的各个应用程序中使用。

QDebug的主要功能:
  1. 输出变量值QDebug可以输出各种类型的数据,如字符串、整数、浮点数等。

  2. 支持流式输出:可以连续输出多个变量,使用<<操作符。

  3. 自定义输出格式:可以通过重载<<操作符来定制输出格式。

  4. 输出十六进制值:可以将整数以十六进制形式输出。

  5. 去除双引号和空格:可以输出没有双引号和空格的文本。

  6. 调试输出级别:Qt提供了不同级别的调试输出,如qInfoqWarningqCritical等,QDebug可以输出这些不同级别的调试信息。

  7. 自定义类型输出:通过实现自定义的输出运算符重载,可以使QDebug输出自定义类型的数据。

注意事项:
  • QDebug默认情况下输出的是人类可读的格式,但在某些情况下,可能需要自定义格式以满足特定的输出需求。
  • QDebug输出不保证线程安全,因此在多线程应用程序中使用时需要特别注意。
  • 自定义类型输出时,需要确保QDebug对应的输出运算符已经被正确重载。 

 对象树

        在Qt中,对象树是一个核心概念,它描述了Qt应用程序中对象之间的关系。在Qt框架中,每个QObject派生类的实例都是对象树中的一个节点。对象可以通过设置父-子关系来构建层次结构,形成一个树状结构,这棵树被称为对象树。

Qt官网中对QObject派生类 

(朱波还没认真看,先甩个链接晚点我研究一下)

对象树的特点:
1. 自动内存管理:Qt的对象树提供了自动内存管理机制。当一个对象被销毁时,其下的整个子对象树也会被递归销毁,释放所有相关内存资源。
2. 事件传播系统:对象树还负责事件传播。在Qt中,事件首先在对象树中向下传播(即从父对象到子对象),然后才在窗口系统中被处理。
3. 组织UI元素:在Qt中,对象树常用于组织和维护用户界面元素。通过对象树,可以方便地管理和操作UI组件。
父-子关系:
- 父对象:每个QObject实例都有一个父对象指针,称为Parent。这个指针在QObject构造函数中接收,它指向一个父级QObject。
- 子对象:子对象会自动加入到父对象的children列表中。这意味着,父对象的子对象可以在父对象的children列表中找到,并且可以访问它们。
对象树的构建:
在Qt中,构建对象树通常通过指定父对象来添加子对象。例如,如果你创建了一个QPushButton对象,并希望将其作为QWidget对象的子对象,你可以设置QPushButton的Parent为QWidget对象。

QPushButton *btn = new QPushButton("Click Me", parent);

在这里,“parent” 是指向QWidget对象的指针。
对象树与信号槽:
Qt的信号槽机制与对象树紧密结合。信号槽机制允许对象在未耦合的情况下进行交互。信号是由对象发出的,表明某个事件已经发生的通知;槽是接收信号并执行相应操作的函数。在Qt中,信号和槽的关系是独立的,但可以通过connect函数连接起来。

示例:

以下是一个简单的Qt代码示例,展示了如何创建父-子关系和对象树:

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget *window = new QWidget;
    QPushButton *btn = new QPushButton("Click Me", window);

    // 连接按钮的点击信号到窗口的关闭槽
    QObject::connect(btn, &QPushButton::clicked, window, &QWidget::close);

    window->show();

    return app.exec();
}

在这个例子中,“window”是父对象,“btn” 是子对象。当按钮被点击时,它发出的信号 “clicked” 被连接到 “window” 的 “close” 槽,导致窗口关闭。

---当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。

---一定程度上简化了内存回收机制。

---对象树从上到下构造,从下到上析构。

三、一点点学习总结

        虽然目前我也还是在QT初初初初学阶段,但是还是分享一下自己的学习心得。首先一定一定要先学习C++基础,着急学的话可以先看看前面的基础内容,我自己看的书是这个👇

然后我现在只看了第一章(绪论)、第二章(C++语言简单程序设计)、第三章(函数)、第四章(类和对象)和第七章(类的继承)的第一节,看视频学这些差不多够了,最好把第七章看完最好了。一二章就是C语言基础,然后因为我们这学期有上Java课所以这些内容我看的快也大致能看懂。反正没有学过C++一定要先看书再学QT,要不然看视频会学的很懵逼 吧哈哈哈哈哈哈。

哦哦哦对了欢迎大家对我的博客提出指正,写的有点构式不知道咋改 哈哈哈哈哈

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值