1-信号与槽

1. main函数介绍

在这里插入图片描述

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
//自定义类:继承QWidget类
class MyWidget : public QWidget
{
    Q_OBJECT

public:
    //构造函数,用参数初始化父类
    MyWidget(QWidget *parent = 0);
    //析构函数
    ~MyWidget();
};

#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"

//构造函数
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{
}
//析构函数
MyWidget::~MyWidget()
{

}

main.c

#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    //应用程序类,创建一个应用程序的对象
    QApplication a(argc, argv);
    //创建一个自定义窗口对象
    MyWidget w;
    //显示窗口
    w.show();
    //循环机制
    return a.exec();
}

2. 命名规范和快捷方式

在这里插入图片描述

2.1 pro文件的含义

day01.pro

QT       += core gui  //包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块
TARGET = QtFirst  //应用程序名  生成的.exe程序名称
TEMPLATE = app    //模板类型    应用程序模板
SOURCES += main.cpp\   //源文件
        mywidget.cpp
HEADERS  += mywidget.h   //头文件

2.2 命名规范

  1. 类:首字母大写,每个字母大写;
  2. 变量和函数:首字母大写,其他字母小写;

2.3 常用快捷键

ctrl r 运行
ctrl i 注释
ctrl f 查找

3. 按钮及窗口常用接口

在这里插入图片描述

MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{
    //1.创建按钮
    QPushButton *btn1 = new QPushButton;
    //2.设置按钮的父窗口
    btn1->setParent(this);
    //3.设置文本
    btn1->setText("孙悟空");
    //4.定义第二个按钮
    QPushButton *btn2 = new QPushButton("猪八戒", this);
    //5.设置窗口大小
    resize(600, 400);
    //6.移动按钮
    btn2->move(100, 100);
    //7.设置窗口名字
    this->setWindowTitle("第一个窗口");
    //8.固定窗口大小
    this->setFixedSize(600, 400);
}

4. 对象树

在这里插入图片描述
在这里插入图片描述

1. 无需delete对象

  1. QPushButton类继承QWidget类继承QObject类,因此new出来的对象无需delete
  2. 通过创建一个自定义类来继承QPushButton类,来验证是否需要delete析构该类的对象。

MyQpushButton.h

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include <QWidget>
#include <QPushButton>

class MyPushButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyPushButton(QPushButton *parent = 0);
    ~MyPushButton();

signals:

public slots:
};

#endif // MYPUSHBUTTON_H

MyQpushButton.cpp

#include "mypushbutton.h"

#include <QPushButton>
#include <QDebug>

MyPushButton::MyPushButton(QPushButton *parent) : QPushButton(parent)
{

}
MyPushButton::~MyPushButton()
{
    qDebug() << "MyPushButton析构函数";
}

widget.cpp

#include "widget.h"
#include <QPushButton>
#include <mypushbutton.h>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    MyPushButton *btn3 = new MyPushButton;
    btn3->setParent(this);
    btn3->setText("沙悟净");
    btn3->move(100,300);d
}

Widget::~Widget()
{

}

5. 信号与槽

1. 基本原理

在这里插入图片描述

 //1.创建按钮
    MyPushButton *btn3 = new MyPushButton;
    btn3->setParent(this);
    btn3->setText("关闭窗口");
    btn3->move(100,300);

    /*信号与槽*/
    connect(btn3, &MyPushButton::clicked, this, &MyWidget::close);

2. 自定义信号和槽

在这里插入图片描述widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<teacher.h>
#include <student.h>
class Widget : public QWidget
{
    Q_OBJECT

public:
     //1.创建指针
    Teacher* tc;
    Student* st;
    //7.触发信号函数声明
    void trigger();
    Widget(QWidget *parent = 0);
    ~Widget();  
};

#endif // WIDGET_H

teacher.h

#ifndef TEACHER_H
#define TEACHER_H

#include <QObject>

class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = 0);

signals:
    //3.自定义信号函数声明
    void mySingal();

public slots:
};

#endif // TEACHER_H

student.h

#ifndef STUDENT_H
#define STUDENT_H

#include <QObject>

class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = 0);

signals:


public slots:
    //4.自定义槽函数声明
    void mySlots();
};

#endif // STUDENT_H

widget.cpp

#include "widget.h"
#include<teacher.h>
#include <student.h>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //2.指针指向对象
    this->tc = new Teacher(this);
    this->st = new Student(this);
    //6.连接函数
    connect(tc, &Teacher::mySingal, st, &Student::mySlots);
    //9.调用触发信号函数
    trigger();

}
    //8. 触发信号函数实现
void Widget::trigger()
{
    emit this->tc->mySingal();
}
Widget::~Widget()
{

}

student.cpp

//5.自定义槽函数实现
void Student::mySlots()
{
    qDebug() << "自定义槽函数";
}

3. 重载信号与槽函数

在这里插入图片描述

  //3.1重载信号函数
    void mySingal(QString qs);
//4.1重载槽函数
    void mySlots(QString qs);
void Student::mySlots(QString qs)
{
    qDebug() << "自定义槽函数" << qs.toUtf8().data();
}
 //6.1重载信号和槽函数后的连接函数
    void (Teacher::*MySingal)(QString) = &Teacher::mySingal;
    void (Student::*MySlots)(QString) = &Student::mySlots;
    connect(tc, MySingal, st, MySlots);
emit this->tc->mySingal("重载信号和槽");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值