Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)

本文详细介绍了Qt编程中的按钮创建和父子关系,包括如何设置按钮文字和位置。同时,阐述了Qt窗口的坐标体系和对象树模型,强调了对象树在内存管理中的作用。文章还深入讨论了信号和槽机制,包括系统自带的信号槽以及如何自定义信号和槽。最后,提到了Qt4与Qt5中信号槽的不同写法,以及Lambda表达式在Qt编程中的应用,展示了如何使用Lambda作为槽函数来简化代码。

一、Qt按钮小程序

1.  按钮的创建和父子关系

        在Qt程序中,最常用的控件之一就是按钮了,首先我们来看下如何创建一个按钮:

#include <QPushButton>

    QPushButton * btn = new QPushButton; 
    //设置父亲
    btn->setParent(this);
    //设置文字
    btn->setText("德玛西亚");
    //移动位置
    btn->move(100,100);

    //第二种创建
    QPushButton * btn2 = new QPushButton("孙悟空",this);
    //重新指定窗口大小
    this->resize(600,400);

    //设置窗口标题
    this->setWindowTitle("第一个项目");

    //限制窗口大小
    this->setFixedSize(600,400);

       上面代码中,一个按钮其实就是一个QPushButton类的对象,如果只是创建出对象,是无法显示到窗口中的,所以我们需要依赖一个父窗口,也就是指定一个父亲,利用setParent函数或者按钮创建的时候通过构造函数传参,此时我们称两个窗口建立了父子关系。在有父窗口的情况下,窗口调用show会显示在父窗口中如果没有父窗口,那么窗口调用show显示的会是一个顶层的窗口(顶层窗口是能够在任务栏中找到的,不依赖于任何一个窗口而独立存在)(按钮也是继承于QWidget,也属于窗口)。

        如果想设置按钮上显示的文字可以用setText,移动按钮位置用move。

        对于窗口而言,我们可以修改左上角窗口的标题setWindowTitle,重新指定窗口大小:resize,或者设置固定的窗口大小setFixedSize。 

2. Qt窗口坐标体系   

        通过以上代码可以看出Qt的坐标体系。以左上角为原点(0,0),以向右的方向为x轴的正方向,以向下方向为y轴的正方向。如下图所示:

         对于嵌套窗口,其坐标是相对于父窗口来说的。顶层窗口的父窗口就是屏幕。

3. 对象树模型 

        QObject是Qt里边绝大部分类的根类(基类)。

  1. QObject对象之间是以对象树的形式组织起来的。
    1. 当两个QObject(或子类)的对象建立了父子关系的时候。子对象就会加入到父对象的一个成员变量叫children(孩子)的list(列表)中。
    2. 父对象析构的时候这个列表中的所有对象也会被析构(注意,这里是说父对象和子对象,不要理解成父类和子类)
  2. QWidget是能够在屏幕上显示的一切组件的父类
    1. QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。我们向某个窗口中添加了一个按钮或者其他控件(建立父子关系),当用户关闭这个窗口的时候,该窗口就会被析构,之前添加到他上边的按钮和其他控件也会被一同析构。这个结果也是我们开发人员所期望的。
    2. 当然,我们也可以手动删除子对象。当子对象析构的时候会发出一个信号destroyed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

神化川流

感谢您的支持,让我们一起成长

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

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

打赏作者

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

抵扣说明:

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

余额充值