功能:点击按钮关闭窗口
理论图示如下:
忘记的函数去qt助手中可以搜索
代码实现
#include "mywidget.h"
#include<QPushButton>//按钮的头文件
myWidget::myWidget(QWidget *parent)
: QWidget(parent)//初始化列表
{
QPushButton * btn=new QPushButton;
//让btn对象依赖在mywidget窗口中
btn->setParent(this);
//显示文本
btn->setText("123");
//需求:点击按钮关闭窗口
//参数1:信号发送者;参数2:发送的信号(函数的地址);参数3:信号接收者;参数4:处理的槽函数
connect(btn,&QPushButton::clicked,this,&myWidget::close);
}
myWidget::~myWidget()
{
}
自定义的信号和槽
理论部分:
- 自定义信号
1.1 写到signals下
1.2 返回void,也就是没有返回值
1.3 需要声明,但是不需要实现
1.4 可以有参数,可以重载 - 自定义槽函数
2.1 返回void
2.2 可以有参数,可以重载
2.3 需要声明,也需要实现
2.4 写到publilc下或者public slot下面
实际案例:
实例:老师饿了,学生请吃饭
一、
首先分别添加学生和老师的头文件(.h文件)
studnt.h:
#ifndef STUDENT_H
#define STUDENT_H
#include <QObject>
class Student : public QObject
{
Q_OBJECT
public:
explicit Student(QObject *parent = nullptr);
//槽函数:无返回值,需要声明也需要实现
//可以有参数可以发生重载
void treat();
signals:
//有些QT版本里面会有一行这样的代码
//public slots:
//这行代码是用来当作槽来使用的,5.4版本后也可以将槽的代码直接写在public下,早期版本一定要写在此处
};
#endif // STUDENT_H
teacher.h:
#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
Q_OBJECT
public:
explicit Teacher(QObject *parent = nullptr);
signals:
//自定义信号写在这里
//没有返回值,只需要声明不需要实现
//可以有参数的,可以重载
void hungry();
};
#endif // TEACHER_H
二、
设置完头文件之后要设置实现文件(.cpp文件)
student.cpp:
#include "student.h"
#include<QDebug>//打印的头文件
Student::Student(QObject *parent) : QObject(parent)
{
}
void Student::treat()
{
qDebug()<<"请老师吃饭";//打印这行字
}
teacher.cpp:
#include "teacher.h"
Teacher::Teacher(QObject *parent) : QObject(parent)
{
}
窗口文件mywidget.cpp:
//这是窗口界面
#include "mywidget.h"
#include<QPushButton>//按钮的头文件
#include"teacher.h"
#include"student.h"
myWidget::myWidget(QWidget *parent)
: QWidget(parent)//初始化列表
{
//创建一个老师对象
this->zt=new Teacher(this);//this(括号里面的)加不加都行,加上了表示对象树就不用考虑释放的问题了
//创建一个学生对象
this->st=new Student(this);
//老师饿了,学生请客的链接;
connect(zt,&Teacher::hungry,st,&Student::treat);
//调用下课函数
classIsOver();
}
void myWidget:: classIsOver()
{
//下课函数,调用后触发老师饿了
emit zt->hungry();
}
myWidget::~myWidget()
{
}
是
在窗口文件的头文件中记得增加一个classIsOver()函数的定义
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include"teacher.h"
#include"student.h"
#include<QWidget>
#include <QWidget>//包含头文件QWidget(窗口类)
class myWidget : public QWidget
{
Q_OBJECT//Q_OBJECT宏,允许类中使用信号和槽的机制
public:
myWidget(QWidget *parent = nullptr);//构造函数
~myWidget();
private:
Teacher *zt;
Student *st;
void classIsOver();
};
#endif // MYWIDGET_H