{{docContent.title}}

新建一个简单的界面

右键新建一个c++ class文件

这里我就取名为chat了

chat.cpp内容如下

//
// Created by 小游 on 2020/12/21 0021.
//

#include "chat.h"
// 这个ui_chat.h是.ui文件生成的,我们可以使用 UIC来自动生成
#include "ui_chat.h"

// chat的构造函数,这个:: 表示在外部定义函数
// 这个: 在构造函数中起到分割的作用,这个一般用于初始化类成员变量
// 这里我们其实就是在初始化QWidget 和Ui这两个对象
// 这个new Ui::Chat 传的是ui_chat.h 这里面的对象
Chat::Chat(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Chat)
{
    // 这个函数实现窗口的生成与各种属性的设置、信号与槽的关联
    ui->setupUi(this);
}

// 析构函数,当函数执行完毕后我们删除对象
Chat::~Chat()
{
    delete ui;
}

// 窗口点击事件
void Chat::on_pushButton_clicked()
{
    printf("you click the button");
}

chat.h文件内容如下

//
// Created by 小游 on 2020/12/21 0021.
//
#ifndef WIDGET_H
#define WIDGET_H

// 引入QWidget 这个是一个窗口的基类
#include <QWidget>

// 这是声明了一个名称为 Ui 的命名空间(namespace),
// 包含一个类 Chat。而是 ui_widget.h 文件里定义的类,用于描述界面组件的。
// 这个声明相当于一个外部类型声明(具体要看完 ui_widget.h 文件内的解释之后才能搞明白)。
namespace Ui {
    class Chat;
}

// 这里我们定义了一个Chat类,这里我们继承QWidget这个类
class Chat : public QWidget
{

    // 在 Widget 类中使用了宏 Q_OBJECT,这个就相当于 C语言中的 #define
    // 这是使用 Qt 的信号与槽(signal 和 slot)机制的类都必须加入的一个宏(信号与槽在后面详细介绍)
    Q_OBJECT

    // 在 public 部分定义了 Widget 类的构造函数和析构函数。
public:
    // explicit用于修饰构造函数(初始化的时候传入一个QWidget对象)
    explicit Chat(QWidget *parent = 0);
    // 析构函数 与构造函数相反,当程序结束的时候会自动执行来进行善后的工作
    ~Chat();

//    这里我们定义了一个slots 插槽,这个用于UI界面与程序进行交互
private slots:
    // 这个是按钮点击事件的一种写法,通常以 on_控件名字_clicked来表示,这里就是我们之前设置的一个按钮的点击事件
    void on_pushButton_clicked();

// 在 private 部分又定义了一个指针。
// 这个指针是用前面声明的 namespace Ui 里的 Widget 类定义的,
// 所以指针 ui 是指向可视化设计的界面,后面会看到要访问界面上的组件,都需要通过这个指针 ui。
private:
    Ui::Chat *ui;
};

#endif //WIDGET_H

chat.ui内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Chat</class>
 <widget class="QWidget" name="Chat">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>100</x>
     <y>180</y>
     <width>151</width>
     <height>71</height>
    </rect>
   </property>
   <property name="text">
    <string>哈哈哈测试一下</string>
   </property>
   <property name="autoDefault">
    <bool>false</bool>
   </property>
  </widget>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>130</x>
     <y>90</y>
     <width>91</width>
     <height>61</height>
    </rect>
   </property>
   <property name="text">
    <string>标签</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

最后就是我们的主函数了,我们主函数的定义如下:

#include <QApplication>
#include <QFormLayout>
#include <QSlider>
#include <QSpinBox>

#include "chat.h"

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

    // 初始化一个QT application对象
    QApplication a(argc, argv);
    // 初始化一个窗口
    Chat w;
    // 显示我们的窗口
    w.show();
    // 这里就是执行程序
    return a.exec();
}

这样我们点击运行,这个程序就可以成功跑起来了:

这里顺便说一下这两个工具的使用QT开发就是一个编写界面的工具,用于可视化界面开发

而UIC就是用于生成.h文件的,因为我们函数本质上还是需要用到ui_xxx.h文件