Qt学习笔记2

1.信号与槽

1.1使用按钮关闭窗口

前面学习了创建按钮,那么如何让按钮实现功能呢,需要用到信号与槽的知识

实现过程:按钮->点击->窗口->关闭

连接过程使用的函数connect

伪代码connect(信号的发送者,发送的信号,信号的接受者,信号的处理(槽))

信号槽的优点,松散耦合:前两个过程为信号发端,后两者为接收端,本身没有关联,通过connect函数耦合在一起 

    //参数1 信号的发送者 参数2 发送的信号(函数的地址)
    //参数3 信号的接收者(窗口指针) 参数4 信号的处理(槽)
    connect(btn,&QPushButton::clicked,this,&myWidget::close);
    //参数可以用父类,效果一样
    //connect(btn,&QPushButton::clicked,this,&QWidget::close);

效果即为点击按钮窗口关闭

2.1自定义信号与槽

创建两个新的类,老师类与学生类

 

考试时间到,老师发出信号,开始考试,学生处理信号,开始答题

teacher.h头文件声明发出信号

signals://自定义信号写在signals下
    //返回值为void只声明不实现
    //可以有参数可以重载
    void start();

student.h头文件声明接收信号

class Student : public QWidget
{
    Q_OBJECT
public:
    explicit Student(QWidget *parent = nullptr);
    
    void starttest();//学生处理信号不可以写在信号下,需要写在public或者全局
    //返回值void需声明也需实现(在.cpp中)
    //可以有参可以重载
signals:

};

student.cpp实现

#include "student.h"
#include<QDebug>//打印声明
Student::Student(QWidget *parent) : QWidget(parent)
{

}

void Student::starttest(){
    qDebug()<<"开始考试";
}

接下来在窗口中创建老师和学生的对象实现操作,先在窗口头文件中引用老师和同学类的头文件,并在私有成员中声明指针

#include"student.h"
#include"teacher.h"

Teacher*tc;
Student*st;

widget.cpp构造函数中先对私有成员指针初始化

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

    //创建对象
    this->tc=new Teacher(this);
    this->st=new Student(this);
    //连接函数
    connect(tc,&Teacher::start,st,&Student::starttest);
}

运行之后发现并没有出现开始考试的结果,这是因为,老师不是什么时候都发出信号,前提是考试时间到,就比如点击按钮发出信号,没人点击就不会发出

 解决:在窗口私有成员里面声明一个考试时间到的函数,再调用它

widget.cpp

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

    //创建对象
    this->tc=new Teacher(this);
    this->st=new Student(this);
    //连接函数
    connect(tc,&Teacher::start,st,&Student::starttest);
    //调用下课函数
    timeisstart();
}

void Widget::timeisstart(){
    //emit为触发关键字
    emit tc->start();
}

运行之后就显示处理的信号了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rubber树

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值