C++ QT保姆级入门教程

一 模板文件解析

记得几年前刚学习QT的模板文件的语法特征让新手的我头晕目眩,差点放弃。下面我将细致的介绍这几行代码的用途及语法

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

逐行解析如下:

1.1 第一句 使用构造函数

1.1.1 “::”符号

Widget::Widget(QWidget *parent)

1 - 第一个 Widget 是类名,它表示这个函数是 Widget 类的一个成员函数。

2 - 第二个 Widget 是这个成员函数的名称,它是一个构造函数,用于初始化 Widget 类的实例

3 - :: 是 C++ 中的作用域解析运算符(Scope Resolution Operator)。在这里,它用于指定 Widget 构造函数属于 Widget 类的作用域。通常,在类定义之外实现类的成员函数时,需要使用作用域解析运算符来指定该函数属于哪个类

Widget 类的定义在 widget.h 头文件中,而构造函数的实现在 widget.cpp 源文件中,那么在 widget.cpp 中实现构造函数时,就需要使用 Widget::Widget(QWidget *parent) 这样的语法来指定这是 Widget 类的构造函数。

也就是说: 这句代码是使用  类::构造函数(参数)的方式执行构造函数

解析:正常情况下,构造函数确实是在对象实例化时自动执行的。当你创建一个类的实例时,比如使用 Widget w; 或者 Widget *pw = new Widget();,构造函数会被自动调用以初始化对象。然而,C++也允许在类的声明之外定义类的成员函数,包括构造函数。

注意:“实现了这个构造函数”中的“实现”并不是指执行,而是指编写或定义了构造函数的具体代码

1.1.2 “:”符号

Widget::Widget(QWidget *parent) : QWidget(parent)这句代码中,:是C++中的成员初始化列表的语法。它用于在构造函数体中任何代码执行之前,初始化类的成员变量和基类。

  1. Widget::Widget(QWidget *parent)是Widget类的构造函数的声明和定义。它表明这是一个构造函数,用于创建Widget类的实例,并且它接受一个指向QWidget的指针作为参数。
  2. : QWidget(parent)是成员初始化列表的一部分,它用于初始化Widget类的基类QWidget。这里,它将parent参数传递给QWidget的构造函数,以便QWidget基类可以正确地初始化。

成员初始化列表的语法是在构造函数参数列表之后,使用:开始,然后是一系列用逗号分隔的初始化器。每个初始化器都指定了一个成员变量或基类,并提供了用于初始化它的值或表达式。

注意:在Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)这段代码中,QWidget(parent)和ui(new Ui::Widget)都被称为初始化器。 初始化器用于在构造函数体执行之前初始化基类和成员变量。

  1. QWidget(parent)是一个基类初始化器,它调用基类QWidget的构造函数,并将parent参数传递给它。
  2. ui(new Ui::Widget)是一个成员变量初始化器,它动态分配一个Ui::Widget对象,并将其地址赋给成员变量ui。
  3. 初始化器列表中的初始化器之间用逗号分隔,并且它们的执行顺序与在列表中出现的顺序相同。这意味着在这个例子中,首先会初始化基类QWidget,然后会初始化成员变量ui。

1.1.3 ui->setupUi(this)

ui->setupUi(this); 这行代码在 Qt 的 widget 类中非常常见,它用于设置用户界面的初始状态。下面我将解析这行代码的语法和用途。

语法解析

  1. ui 是一个指向 Ui::Widget 类的实例的指针。这个类通常是由 Qt 的用户界面编译器(uic)从 .ui 文件中自动生成的,它包含了用户界面的所有控件(如按钮、文本框等)的定义。
  2. -> 是 C++ 中的成员访问运算符,用于通过指针访问类的成员。 setupUi 是 Ui::Widget 类中的一个成员函数,它负责根据 .ui 文件中的定义来初始化用户界面。
  3. (this) 是对 setupUi 函数的调用,其中 this 指针指向当前的 Widget 对象实例。

用途

ui->setupUi(this); 这行代码的用途是在 Widget 类的构造函数中调用,以初始化用户界面。具体来说,它会:

  1. 创建 .ui 文件中定义的所有控件的实例。
  2. 设置这些控件的初始属性,如大小、位置、文本等。
  3. 将这些控件添加到窗口的布局中。

这样,当 Widget 类的实例被创建时,它的用户界面就会根据 .ui 文件的定义被自动设置好,无需编写额外的代码来手动创建和布局控件。这大大简化了 Qt 应用程序的用户界面开发过程。

注意:Widget 对象实例 = this, 注意Widget对象实例与ui的区别

Widget对象实例是用户定义的类的实例,它代表了一个具体的窗口或窗口部件;而ui则是一个指向由.ui文件生成的类的实例的指针,它包含了该窗口或窗口部件的所有界面元素。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值