Qt 学习第五天:自定义信号和槽:点击按钮控制台输出语句(七夕特辑)

设计一个信号和槽

具体场景:

上回书说到:connect函数需要有四个参数,分别是:

  • 信号的发送者
  • 发送的信号 (函数地址)
  • 信号的接受者
  • 处理的槽函数 (函数的地址)

首先搞定信号的发送者:“女朋友”

发送的信号,我们命名一个函数叫angry(),用来发送信号

信号的接受者:“男朋友”

处理的槽函数,我们命名一个函数叫coax(),用来处理信号

创建Boyfriend与Girlfriend类

右键点击项目文件夹

Base class选QObject或者QWidget,其他还没学到先不要选,避免出错

会多出来4个文件

女朋友发送信号

在对应的.h文件声明angry()函数

发送端由于只是发送信号,并没有需要其他功能,所以cpp文件不用实现angry()函数功能

男朋友接受信号,并调用槽函数处理信号

创建后是没有槽的声明,需要手动添加public slots:

在对应的.h文件声明coax()函数

接收端需要处理信号并输出【哄宝宝开心~】语句,需要在cpp文件实现coax()函数

窗口类实现连接

widget.h文件:引入头文件,声明自定义对象。定义一个触发信号函数,名字叫menstrualPeriod()-月经期,调用这个函数时,发送生气信号

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "Boyfriend.h" //引入自定义的头文件
#include "Girlfriend.h" //引入自定义的头文件

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    //在窗口类声明两个对象
    Boyfriend *boy;
    Girlfriend *girl;
    //定义一个接口
    void menstrualPeriod(); //月经期

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp文件:

  • 实现menstrualPeriod()函数,用于发送信号,emit关键字就是发送的意思。
  • 构造两个对象,this作为参数传入对应cpp的构造函数中
  • 连接信号和槽
  • 调用menstrualPeriod()函数,发送信号
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton> //按钮头文件
#include <QColor>  //用于改颜色

//Widget构造函数
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget)
{
    ui->setupUi(this);
     
    this->boy = new Boyfriend(this); // 创建一个Boyfriend对象,并将当前对象作为参数传递给构造函数
    this->girl = new Girlfriend(this); // 创建一个Girlfriend对象,并将当前对象作为参数传递给构造函数
    
    //连接信号和槽,当女朋友生气时,男朋友会尝试哄她开心
    connect(girl, &Girlfriend::angry, boy, &Boyfriend::coax);

    //连接成功,调用函数
    menstrualPeriod();
}

void Widget::menstrualPeriod() //月经期
{
    //发送信号,emit意为发送
    emit girl->angry();
}

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

运行结果

打开窗口后就控制台输出语句

实现新功能:点一下按钮,控制台发一条语句

给按钮加上背景颜色

上一篇的代码搬出来重用,做一个小改动,加个粉色和改一下文字

效果图

改文字很简单,怎么改颜色?

1. 首先,确保已经包含了必要的头文件:

#include <QColor>

2. 为了改变按钮的颜色,可以使用setStyleSheet方法来设置按钮的背景颜色

btn2->setStyleSheet("background-color: pink"); //设置按钮的背景颜色

完整代码:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton> //按钮头文件
#include <QColor>  //用于改颜色

Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //第二种new方式,省略上面两行
    QPushButton *btn2 = new QPushButton("女朋友生气了", this);
    btn2->move(100,100); //按钮左上点移动到100*100的位置上
    btn2->setStyleSheet("background-color: pink"); //设置按钮的背景颜色

    //connect(btn2, &QPushButton::clicked, this, &QWidget::close);
}

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

连接按钮的点击信号和槽函数

widget.cpp文件:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton> //按钮头文件
#include <QColor>  //用于改颜色

//Widget构造函数
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->boy = new Boyfriend(this); // 创建一个Boyfriend对象,并将当前对象作为参数传递给构造函数
    this->girl = new Girlfriend(this); // 创建一个Girlfriend对象,并将当前对象作为参数传递给构造函数

    //第二种new方式,省略上面两行
    QPushButton *btn2 = new QPushButton("女朋友生气了", this);
    btn2->move(100,100); //按钮左上点移动到100*100的位置上
    btn2->setStyleSheet("background-color: pink"); //设置按钮的背景颜色

    //连接按钮点击事件与coax槽函数
    connect(btn2, &QPushButton::clicked, boy, &Boyfriend::coax);

}
/*
void Widget::menstrualPeriod() //月经期
{
    //发送信号,emit意为发送
    emit girl->angry();
}
*/
Widget::~Widget()
{
    delete ui;
}

运行结果

当然,你把menstrualPeriod()作为槽函数也可以,前提是【当女朋友生气时,男朋友会尝试哄她开心】这个信号和槽要先连接,效果一样:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton> //按钮头文件
#include <QColor>  //用于改颜色

//Widget构造函数
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->boy = new Boyfriend(this); // 创建一个Boyfriend对象,并将当前对象作为参数传递给构造函数
    this->girl = new Girlfriend(this); // 创建一个Girlfriend对象,并将当前对象作为参数传递给构造函数

    //连接信号和槽,当女朋友生气时,男朋友会尝试哄她开心
    connect(girl, &Girlfriend::angry, boy, &Boyfriend::coax);

    //第二种new方式,省略上面两行
    QPushButton *btn2 = new QPushButton("女朋友生气了", this);
    btn2->move(100,100); //按钮左上点移动到100*100的位置上
    btn2->setStyleSheet("background-color: pink"); //设置按钮的背景颜色

    //连接按钮点击事件与menstrualPeriod槽函数
    connect(btn2, &QPushButton::clicked, this, &Widget::menstrualPeriod);

    //connect(btn2, &QPushButton::clicked, boy, &Boyfriend::coax);

    //连接成功,调用函数
    menstrualPeriod();
}

void Widget::menstrualPeriod() //月经期
{
    //发送信号,emit意为发送
    emit girl->angry();
}

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

补充知识点:

打印语句:

  • 引入头文件<QDebug>
  • qDebug() 作为输出,类似c++的cout

新的英文单词:说不定四六级能用上

参考文档:http://t.csdnimg.cn/lWqVL

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值